Android之Activity的生命周期和Activity间的跳转和数据传递
2011-06-23 11:46
736 查看
(1)首先是Activity的简单跳转:
Intent intent = new Intent(); //创建一个Intent对象
intent.setClass(activity1.this, activity2.class); //描述起点和目标
startActivity(intent); //开始跳转
(2)通常,我们在Activity的切换中,希望把前一个Activity的某些数据传递给下一个Activity。这时,我们可以借助Bundle来实现。Bundle,相当于数据存储包,用于存放我们想要转达的数据。打个比方,Intent就像一封邮件,里面有送信人地址(原始Activity),也有收信人地址(目标Activity),而Bundle就是附件也可看做是信件内容。下面是它的简单实现:
a、Activity1发送:
Intent intent = new Intent();
intent.setClass(activity1.this, activity2.class); //描述起点和目标
Bundle bundle = new Bundle(); //创建Bundle对象
bundle.putString("something", "Activity1发来的数据"); //装入数据
intent.putExtras(bundle); //把Bundle塞入Intent里面
startActivity(intent); //开始切换
b、Activity2接受从Activity1发来的数据:
Intent intent = this.getIntent(); //获取已有的intent对象
Bundle bundle = intent.getExtras(); //获取intent里面的bundle对象
string = bundle.getString("something"); //获取Bundle里面的字符串
(3)解决了如何传递数据问题,那么下一个问题是如何接受从目标Activity返回的处理结果。这里有两种方式,一是在onRestart方法(onRestrart表示重启Activity时激发的事件,具体看上一篇的生命周期)里面接受处理结果,方法实现和Activity2接受从Activity1发来的数据处理一样。另一种方式,是采用应答模式切换。这里,主要下第二种方式。应答模式切换和普通的切换不同在于,普通的是有去没回,应答则是有来有往。代码实现也不一样:1、从Activity1切换到Activity2:startActivityForResult(intent,0);2、从Activity2返回到Activity1:setResult(RESULT_OK, intent)。3、接受返回结果:protected void onActivityResult()。具体代码如下;
a、从Activity1切换到Activity2:
Intent intent = new Intent();
intent = intent.setClass(ActivityIntent.this, AnotherActivity.class);
Bundle bundle = new Bundle();
bundle.putString("string", et_string.getText().toString());
intent.putExtras(bundle);
startActivityForResult(intent,0); //只有这里不同
//ActivityIntent.this.finish(); //不能用finish,会触发onDestroy();
b、从Activity2返回到Activity1:
Intent intent = new Intent();
intent = intent.setClass(AnotherActivity.this, ActivityIntent.class);
Bundle bundle = new Bundle();
bundle.putInt("result", "Activity2的处理结果");
intent.putExtras(bundle);
AnotherActivity.this.setResult(RESULT_OK, intent); //RESULT_OK是返回状态码
AnotherActivity.this.finish(); //会触发onDestroy();
c、Activity1接受Activity2的返回结果:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(resultCode) { //根据状态码,处理返回结果
case RESULT_OK:
Bundle bundle =data.getExtras(); //获取intent里面的bundle对象
String result = bundle.getInt("result");
break;
default:
break;
}
}
(4)、从Activity2中返回到Activity1(在Activity1切换到Activity2时,调用了finish方法),你会发现你在Activity1以前的数据全没了,简单的说就是数据被没有保留下来。因为finish方法,会触发onDestroy(),使得Activity1销毁。下一次再来到Activity1时,是全新的Activity1,以往的数据当然不在。如果想保留切换前的状态,可以采用两种方式:1、切换时,不调用finish()方法。2、采用SharedPreferences来保存数据。SharedPreferences 是一个轻量级存储类,主要用于保存一些窗体的状态,如文本框值、按钮状态等等,类似于Session。一般在onPause()方法里面保存数据,在onResume()里面提取数据。实现如下:
a、保存数据
//暂停:onStart()->onResume()->onPause()
@Override
protected void onPause() {
super.onPause();
Log.e("Lifecycle_Activity1", "onPause()");
//把数据保存到类似于Session之类的存储集合里面
SharedPreferences.Editor saveData = getPreferences(0).edit();
saveData.putString("value", et_string.getText().toString());
saveData.commit();
}
b、提取数据
//重启:onStart()->onResume()
@Override
protected void onResume() {
super.onResume();
Log.e("Lifecycle_Activity1", "onResume()");
//从共享数据存储对象中获取所需的数据
SharedPreferences getData = getPreferences(0);
String value = getData.getString("value", null);
if(value != null) {
et_string.setText(value);
}
}
相关文章推荐
- Android之Activity的生命周期和Activity间的跳转和数据传递
- Android-Activity生命周期-4种启动模式-数据传递-显式隐式跳转
- Android之Activity的生命周期和Activity间的跳转和数据传递
- Android_06_Activity跳转时,数据的传递及接收
- Android笔记——Activity生命周期与数据传递
- Android之Activity的生命周期和Activity间的切换和数据传递(二)
- Android activity之间的跳转和数据传递
- android数据传递之activity带返回值的跳转,模拟登陆注册
- Android Day06四大组件之Activity多页面跳转和数据传递
- android---(Activity组件、状态、生命周期、传递数据、处理返回结果、屏幕方向、保存数据)
- Android 使用Intent实现Activity跳转和数据传递
- android83 Activity的生命周期,启动模式,返回时传递数据
- android的activity跳转传递List类型数据
- 记android学习之路----Activity(4)----Activity之间的跳转与数据传递
- [Android新手学习笔记05]-如何进行活动Activity之间的跳转以及数据传递
- android中页面跳转以及数据在Activity之间的传递
- Android中Activity的跳转与数据的传递案例(装备的选择)
- Android 跳转Activity并通过Bundle对象传递数据
- Android实现intent跳转界面传递数据(2)——onActivityResult方法接收返回值
- ym——Android从零开始(12)(Activity传递返回参数+生命周期+横竖屏+保持临时数据)(新)