上一节,我们通过对Activity的UI属性设置,完成了一个类似Activity切换的程序,可是大家都知道,明明只有一个Activity的子类存在于程序当中,谈何切换呢?
本节将从实质上去完成这个功能。
进入本文之前,我们先来看看一个类;android.content.Intent
Intent是一种运行时绑定(runtime binding)机制,它能在程序运行的过程中连接两个不同的组件。通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来请求。比如,有一个Activity希望打开网页浏览器查看某一网页的内容,那么这个Activity只需要发出WEB_SEARCH_ACTION请求给Android,Android会根据Intent的请求内容,查询各组件注册时声明的IntentFilter,找到网页浏览器Activity来浏览网页。
简单说来,Intent允许在一个Activity中调用另外一个Activity,并且允许在不同的Activity之间传递参数。
这一节,我们只介绍怎样在Activity内调用另外一个Activity,并不传递参数。
先来看效果图:
[img]http://dl.iteye.com/upload/attachment/496660/d78ef16b-8989-37c7-ab9d-affcce095c8b.jpg[/img]
[img]http://dl.iteye.com/upload/attachment/496662/99fccc9f-8710-37d3-b3fc-20acb2553be3.jpg[/img]
因为本程序涉及的类和文件比较多,为了简便,就不在strings.xml中设置程序用到的字符串了,直接在文件和类里面使用。
先在程序自己生成的main.xml中设置第一个Activity的布局配置,包括一个TextView和一个Button,代码如下所示:
而后,我们再在此目录下,重新生成一个mylayout.xml,同样是配置一个TextView和一个Button,这个xml的配置是为了第二个Activity而准备的,代码如下:
接下来就是分别把这两个xml分别关联到两个Activity的子类中去,并且为两个Button关联上点击事件,在事件的实现中,添加上Intent类的功能,就大功告成啦。
其中,Activity1的代码如下,
其中
这句说明,Intent是要从Activity1跳转到Activity2,
startActivity(intent);说明从intent中获取信息,跳转。
而后面的
AndroidWithIntent_Activity1.this.finish();
是指将这个Activity1给关闭了。
同样的道理,Activity2的代码也应该是这样的套路,代码如下,就不具体再分析了;
最后,我们需要将我们自己新建的Activity配置进入AndroidManifest.xml,
在该文件中,存在application标签,里面存放的是Activity标签,可以看到,我们生成好的Activity1已经配置好在里面了,在该Activity的同级位置,添加如下代码:
这样我们的系统就可以识别我们新建的Activity类了。
在下一节我们将介绍如何在Activity之间切换的同时,传递点数据过去,就像是在html页面间传递数据一样。
本节将从实质上去完成这个功能。
进入本文之前,我们先来看看一个类;android.content.Intent
Intent是一种运行时绑定(runtime binding)机制,它能在程序运行的过程中连接两个不同的组件。通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来请求。比如,有一个Activity希望打开网页浏览器查看某一网页的内容,那么这个Activity只需要发出WEB_SEARCH_ACTION请求给Android,Android会根据Intent的请求内容,查询各组件注册时声明的IntentFilter,找到网页浏览器Activity来浏览网页。
简单说来,Intent允许在一个Activity中调用另外一个Activity,并且允许在不同的Activity之间传递参数。
这一节,我们只介绍怎样在Activity内调用另外一个Activity,并不传递参数。
先来看效果图:
[img]http://dl.iteye.com/upload/attachment/496660/d78ef16b-8989-37c7-ab9d-affcce095c8b.jpg[/img]
[img]http://dl.iteye.com/upload/attachment/496662/99fccc9f-8710-37d3-b3fc-20acb2553be3.jpg[/img]
因为本程序涉及的类和文件比较多,为了简便,就不在strings.xml中设置程序用到的字符串了,直接在文件和类里面使用。
先在程序自己生成的main.xml中设置第一个Activity的布局配置,包括一个TextView和一个Button,代码如下所示:
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="欢迎来到IrvingSun的安卓程序"
/>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="点击进入下一页"
/>
而后,我们再在此目录下,重新生成一个mylayout.xml,同样是配置一个TextView和一个Button,这个xml的配置是为了第二个Activity而准备的,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="对不起程序出错了,请点击“上一步”返回操作"
/>
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="上一页"
/>
</LinearLayout>
接下来就是分别把这两个xml分别关联到两个Activity的子类中去,并且为两个Button关联上点击事件,在事件的实现中,添加上Intent类的功能,就大功告成啦。
其中,Activity1的代码如下,
public class AndroidWithIntent_Activity1 extends Activity {
private Button button1 ;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//关联UI配置
setContentView(R.layout.main);
button1 = (Button)findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//new 一个Intent对象,并指定要启动的class
Intent intent = new Intent();
intent.setClass(AndroidWithIntent_Activity1.this, AndroidWithIntent_Activity2.class);
startActivity(intent);
AndroidWithIntent_Activity1.this.finish();
}
});
}
}
其中
intent.setClass(AndroidWithIntent_Activity1.this, AndroidWithIntent_Activity2.class);
startActivity(intent);
这句说明,Intent是要从Activity1跳转到Activity2,
startActivity(intent);说明从intent中获取信息,跳转。
而后面的
AndroidWithIntent_Activity1.this.finish();
是指将这个Activity1给关闭了。
同样的道理,Activity2的代码也应该是这样的套路,代码如下,就不具体再分析了;
public class AndroidWithIntent_Activity2 extends Activity {
private Button button2 ;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mylayout);
button2 = (Button)findViewById(R.id.button2);
button2.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//new 一个Intent对象,并指定要启动的class
Intent intent = new Intent();
intent.setClass(AndroidWithIntent_Activity2.this, AndroidWithIntent_Activity1.class);
startActivity(intent);
AndroidWithIntent_Activity2.this.finish();
}
});
}
}
最后,我们需要将我们自己新建的Activity配置进入AndroidManifest.xml,
在该文件中,存在application标签,里面存放的是Activity标签,可以看到,我们生成好的Activity1已经配置好在里面了,在该Activity的同级位置,添加如下代码:
<activity android:name="AndroidWithIntent_Activity2"></activity>
这样我们的系统就可以识别我们新建的Activity类了。
在下一节我们将介绍如何在Activity之间切换的同时,传递点数据过去,就像是在html页面间传递数据一样。