Button btn = (Button)findViewById(R.id.go); btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(HelloThree.this, HelloThreeB.class); startActivity(intent); finish(); } });
Button btnExit=(Button)findViewById(R.id.exit);
btnExit.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){ HelloThree.this.finish(); } }); }
这里的跳转功能用 Intent 来操作, 它的最简单用法就是用函数 setClass()设置跳转 前后两个 Activity 类的实例,然后调用 Activity 自己的 startActivity(intent)即可。 最后一句 finish()表示将当前 Activity 关掉 (如果不关掉会如何?你可以自己试一下看 效果,事实上有时我们是不需要关掉当前 Activity 的)。
然后,我们同样弄一个 Activity 类 HelloThreeB,代码与前面的差不多,只是将 setClass 的两个参数反一下, 这样就可以简单地实现在两个 Activity 界面中来回切换的
功能了。
3. 如果我想在两个 Activity 之间进行数据交换,怎么办?
前例中的 startActivity()只有一个参数, 如果需要向新打开的 Activity 传递参数, 我们得换一个函数了, Android 提供了 startSubActivity(Intent,int)这个函数来实现 这个功能。
函数原型为 : public void startSubActivity(Intent intent, int requestCode)
这里的 requestCode 用来标识某一个调用,一般由我们定义一个常量。
如何把参数传过去呢?Intent 类在提供 setClass()函数的同时也提供了一个 setData()函数。 函数原型为:public Intent setData(ContentURI data)
参数类型是 ContentURI,它的详细内容下回再分析,现在就把它当成一个 String 类型来 用吧。
参数带到新的 Activity 后, 同样用 Activity.getIntent()函数可以得到当前过来的 Intent 对象,然后用 getData()就取到参数了。
把参数带回来的方法是 Activity.setResult(),它有几个形式,现在先看最简单的 一个吧。 函数原型是:public final void setResult(int resultCode, String data)
resultCode 是返回代码,同样用来标识一个返回类型,而 data 则是它要返回的参数。
在原来的 Activity 中的事件处理回调函数 onActivityResult,会被系统调用,从它 的参数里可以得到返回值。 函数原型为 : protected void onActivityResult(int requestCode, int
resultCode,String data, Bundle extras)
这里的requestCode就是前面启动新Activity时的带过去的requestCode, 而resultCode
则关联上了 setResult 中的 resultCode,data 是参数,extras 也是一个很重要的东西, 后面再研究一下它的作用。
下面,我们来看一下代码吧,先看看 HelloThree 中的代码: public void setViewOneCommand() {
Button btn = (Button)findViewById(R.id.go); btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) { try{
Intent intent = new Intent();
intent.setClass(HelloThree.this, HelloThreeB.class); intent.setData(new ContentURI(\
startSubActivity(intent,REQUEST_TYPE_A); }
catch(Exception ex){} } });
Button btnExit=(Button)findViewById(R.id.exit);
btnExit.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
HelloThree.this.finish(); } }); }
protected void onActivityResult(int requestCode, int resultCode,
String data, Bundle extras)
{
if (requestCode == REQUEST_TYPE_A) {
if (resultCode == RESULT_OK) { Log.v(TAG,data);
TextView txt = (TextView)findViewById(R.id.txt); txt.setText(data); } } }
这里的 REQUEST_TYPE_A 是我们定义的一个常量。在 onActivityResult 中用它与 RESULT_OK 一起作为条件判断如何处理返回值,这里只是简单将 TextView 显示值换成传 来的字串。
再来看看另一个 HelloThreeB 类的实现代码: private Intent i;
protected void onCreate(Bundle icicle) { super.onCreate(icicle);
setContentView(R.layout.second);
i = getIntent();
android.util.Log.v(TAG,\
Button btn = (Button)findViewById(R.id.go);
btn.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
String result=HelloThreeB.this.i.getData().toString()+\
Two\
HelloThreeB.this.setResult(RESULT_OK,result); finish(); } });
TextView v = (TextView)findViewById(R.id.txt); v.setText(\
}
在按钮处理事件中,从 Intent 取出参数,处理一下再用 setResult 返回给前一个 Activity 即可。
编译运行即可。 来源:http://www.sf.org.cn/Android/lumen/20977.html Android 学习笔记(3)-Activity 的生命周期
注意到在 Activity 的 API 中有大量的 onXXXX 形式的函数定义,除了我们前面用到 的 onCreate 以外,还有 onStart,onStop 以及 onPause 等等。从字面上看,它们是一些
Android(经典实例)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)