一、Activity概念介紹
activity屬於android的四大組件之一(其他的三個: Content provider,Broadcast receiver,Service),它可以理解為一個視窗,一個與用戶進行交互的窗口,一個Activity通常就占據一個屏幕。每個Activity都是一個單獨的類,並且要繼承Activity。
Activity類的繼承關系:------->Activity出在android.app包下
直接子類:AccountAuthenticatorActivity, ActivityGroup, AliasActivity, ExpandableListActivity, FragmentActivity, ListActivity, NativeActivity
間接之類:ActionBarActivity, LauncherActivity, PreferenceActivity, TabActivity
也就是說,你要創建一個activity你可以根據自己的需要直接繼承上述Activity類。當然你可以根據在項目中的需要創建自己需要的Activity子類類,前提是必須繼承Activity。如:BaseActivity extends Activity。
二、Activity創建
創建Actvity首先要繼承Actvity,然後如果是創建工程的第一個Actviity,系統會默認在Manifest文件中聲明這個Activity;如果不是創建的第一個Activity,那麼就要自己在Manifest文中聲明你所創建的Activity了。聲明要放在application標簽下。
Manifest文件:
復制代碼
1 <application
2 android:allowBackup="true"
3 android:icon="@drawable/ic_launcher"
4 android:label="@string/app_name"
5 android:theme="@style/AppTheme" >
6 <activity
7 android:name="org.david.work.wifisingledemo.MainActivity"
8 android:label="@string/app_name" >
9 <intent-filter>
10 <action android:name="android.intent.action.MAIN" />
11
12 <category android:name="android.intent.category.LAUNCHER" />
13 </intent-filter>
14 </activity>
15 </application>
復制代碼
解析:android:name聲明的是這個activity的名稱,也可以直接寫成.MainActivity
android:label聲明的這是這個application的名稱
裡面意圖過濾器還包含兩個元素聲明:
action節點中的android.intent.action.MAIN表明它所在的Activity是整個應用程序的入口點.
category中的android.intent.category.LAUNCHER意思是把這個Activityg歸屬到加載器類,即把這個Activity標注為自動會加載和啟動的Activity,這樣程序啟動時候就先加載這個 Activity了.
這兩個標簽說明了此Activity為整個Applicaion的主Acitivity,程序入口。類似c語言的Main函數。(我個人這麼理解)
在Manifest文件中聲明完Activity之後,接下來就要復寫oncreat()方法,通過在oncreat()方法中調用setContentView函數加載所需布局。如: 這樣一個Activity就算是基本創建好了。
三、Activity啟動切換
activity的啟動分為顯式啟動和隱式兩種方式。
顯示啟動:
1 Intent intent = new Intent(this, SecondActivity.class);
2 startActivity(intent);
隱式啟動:
復制代碼
1 <activity
2 android:name=".SecondActivity"
3 android:label="@string/app_name">
4 <intent-filter>
5 <action android:name="org.david.work.wifisingledemo.SecondActivity"/>
6 <category android:name="android.intent.category.DEFAULT"/>
7 </intent-filter>
8 </activity>
復制代碼
1 String action = "org.david.work.wifisingledemo.SecondActivity";
2 Intent intent = new Intent(action);
3 startActivity(intent);
注釋:即使在manifest文件中聲明了action和category只要是顯示啟動也會忽略intent-filter中的聲明。隱式啟動中如果manifest文件中聲明的action和category有兩個activity聲明的相同,那麼系統會彈出一個對話讓用戶選擇啟動哪一個activity。
四、Activity間的數據傳遞
activity之間是可以傳遞數據,這樣就能很方面的從上一個交互界面中獲取數據供當前交互界面使用,處理。啟動一個activity是通過intent,這個意圖來啟動相應的activity的,那麼傳遞數據也不難猜想到肯定也是跟這個東西有關了。intent通過putExtra()這個函數來放數據。可以放入的數據類型有:int,double,short,char,String, CharSequence,Bundle,Serializable ,boolean,Parcelable ...等等(參考官方api)。
例:
1 Intent intent = new Intent(action);
2 Bundle bundle = new Bundle();
3 bundle.putString("sayword", "hello!");
4 intent.putExtras(bundle);
接收數據:
Intent intent = this.getIntent();
Bundle extras = intent.getExtras();
String data = (String) extras.get("sayword");
Log.v(TAG, data);
下篇將主要寫一下Activity的生命周期!!!