一、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文件:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="org.david.work.wifisingledemo.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</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的启动分为显式启动和隐式两种方式。
显示启动:
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
隐式启动:
<activity
android:name=".SecondActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="org.david.work.wifisingledemo.SecondActivity"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
String action = "org.david.work.wifisingledemo.SecondActivity";
Intent intent = new Intent(action);
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)。
例:
Intent intent = new Intent(action);
Bundle bundle = new Bundle();
bundle.putString("sayword", "hello!");
intent.putExtras(bundle);
接收数据:
Intent intent = this.getIntent();
Bundle extras = intent.getExtras();
String data = (String) extras.get("sayword");
Log.v(TAG, data);
下篇将主要写一下Activity的生命周期!!!