1. Activity
Activity代表一个活动,活动是Android基本应用组件,一般情况下就是一个单独的屏幕,例如你能看到的页面。Activity上有很多View的实例,所有的Activity都要集成android.app.Activity类,重写实现onCreat方法。
当Activity_01启动Activity_02时,Activity_01从屏幕中消失,屏幕出现Activity_02,Activity_02将会压入Activity_01所在的栈中,当用户触发返回键时,Activity_02从栈中弹出,Activity_01又显示在屏幕前,是一种“后进先出”的结构。
新建一个Activity实例,需要继承android.app.Activity类。
public class FirstActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE) ; //取消App的标题
setContentView(R.layout.first_layout) ; // 绑定布局文件;
}
}
定义之后,需要再AndriodManifest.xml文件中进行注册:
<?xml version="1.0" encoding="utf-8"?> //xml报文头
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.androidapplication" // 定义了主活动Acitivity路径
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="15" //适配的Android最低版本;
android:targetSdkVersion="16" />
<application
android:allowBackup="false" //标识是否进行数据备份,true表示备份,一般情况下鉴于安全考虑设置为false
android:icon="@drawable/ic_launcher" //App图标设置
android:label="@string/app_name" //App名称
android:theme="@style/AppTheme" >
<activity
android:name=".FirstActivity"
android:label="This is my first Activity">
<!-- 标识该Activity为主活动 -->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".SecondActivity"
android:label="This is my second Activity">
</activity>
</application>
</manifest>
这样就配置ok了,在AndriodManifest.xml中有且只有一个主活动,根据<intent-filter>来判断。
2. Intent
Intent中文意思就是“目的”,意思就是当前屏幕要跳转到哪里,或者说当前一个Acitiviy前往另一个Activity就需要用到Intent。
方式一:样例代码:
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
startActivity(intent) ; // 启动Activity
方法:Intent(Context packageContext, Class<?> cls) 传入组件的构造函数,packageContext也就是上文提到,cls为跳转的Acitivity类,意思就是从当前FirstActivity切换到SecondActivity去。为什么需要指定两个活动呢?因为在Android中有一个活动栈,这样的构造方式才能确保正确的将前一个活动压入栈中,才能在触发返回键的时候活动能够正确出栈。至于AndroidManifest.xml配置这里就不赘述,见上面。
运行截图:
程序中给Button添加了一个监听事件,按钮触发后,利用Intent进行Activity跳转至另一个Activity,见图2:
方式二:样例代码
Intent intent = new Intent(Intent.ACTION_EDIT, null);
startActivity(intent);
Intent(String action, Uri uri) 指定Action类型和Uri的构造函数,URI主要是结合程序之间的数据共享ContentProvider该方式是另外一种Activity跳转,弹出一个dailog进行选择。
比如添加一个主活动,再添加两个跳转活动,通过该方式进行选择跳转,需要再AndroidManifest.xml中进行相关配置:
<activity
android:name=".SecondActivity"
android:label="This is my second Activity">
<intent-filter>
<action android:name="android.intent.action.EDIT" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".ThirdActivity"
android:label="This is my third Activity">
<intent-filter>
<action android:name="android.intent.action.EDIT" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
执行此段代码时,系统会根据主配置AndroidManifest.xml中寻找<action android:name="android.intent.action.EDIT" />,如果对应为多个activity具有<actionandroid:name="android.intent.action.EDIT" />此时就会弹出一个dailog选择Activity。
运行截图:
选择之后则跳转到对应的Activity,这是一种选择性跳转方式。
3. 利用Intent在Activity间传送数据
Intent除了在进行页面跳转外,还可以传递参数给下一个Activity。Intent负责Android应用的各项组件间的通讯,参考百度文库上的解释,“Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。”
举个简单例子,在一个手机短信列表的场景中,假设当前列表对应Activity01,当点击某条短信后,能够跳转至此短信的详细信息屏幕Activity02。鉴于实现该目的,Activity01需要构造一个Intent,这个Intent用于告诉系统,我们要做“查看”动作,此动作对应的查看对象是“某具体短信”,然后调用Activity01 (Intent intent),将构造的Intent传入,系统会根据此Intent中的描述,到AndroidManifest.xml中找到满足此Intent要求的Activity对象,系统调用找到的 Activity02,将 Intent传入给该对象,Activity02根据此Intent中的描述,执行相应的操作。
简单来说,intent相当于媒介作用。
举例说明吧,比如传递数据给下一个活动:
FirstActivity:
Intent intent = new Intent(FirstActivity.this,SecondActivity.class) ;
intent.putExtra("transfer_data", "I am the firstActivity") ;
startActivity(intent) ;
在该类中,用Intent构造函数指定从FirstActivity前往SecondActivity,同时利用intent将参数传递给下一个活动。在Intent中定义了很多方式,基本都是key-value键值对进行保存,到下一个活动中根据key获取即可得到valyue.
SecondActivity:
Intent intent = getIntent() ;
tring data = intent.getStringExtra("transfer_data") ;
Log.i("info", data) ;
利用getIntent()获取传递给SecondActivity的intent, getIntent()是将返回伴随启动Activity时的intent对象,源码如下:
/** Return the intent that started this activity. */
public Intent getIntent() {
return mIntent;
}
启动后,可以在LogCat中看到,此刻说明已经利用intent进行了两个活动间数据传递,总结下,哈哈。
关于LogCat使用,其用途跟web开发中的Logger.info()作用类似,在android开发中,都是采用tag来标识开发者所需要输出的内容,在下图中by Log Tag中输入“info“即可以看到本例中的输出信息了。