Android Activity切换与Activity间数据交互_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > Android Activity切换与Activity间数据交互

Android Activity切换与Activity间数据交互

 2017/8/22 15:08:55  DW039  程序员俱乐部  我要评论(0)
  • 摘要:在Android程序内部,startActivity借助Intent来启动一个子Activity(使用父子关系进行表述,只为表达清晰,Android中并未有父子Activity的概念)。如下:Intentintent=newIntent(LoginActivity.this,MainActivity.class);startActivity(intent);说明:1、LoginActivity.this指明了Intent的上下文2、MainActivity
  • 标签:android 数据 Activity

在Android程序内部, startActivity借助Intent来启动一个子Activity(使用父子关系进行表述,只为表达清晰,Android中并未有父子Activity的概念)。如下:

Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
说明:
1、LoginActivity.this 指明了Intent的上下文
2、MainActivity.class 指明了要启动的子Activity的class
3、Intent除了可以启动Activity外,还可用来启动Service、其他APP
4、startActivity(intent)在执行后,当前Activity将被子Activity覆盖进入暂停状态;当子Activity被关闭时,之前被覆盖的父Activity恢复继续执行。

在父子Activity交替之际(启动子Activity时或父Activity恢复运行时),Android允许两个Activity之间进行数据交互。
1、给新启动的子Activity传递数据
如果给新启动的子Activity传递数据,只需要在Intent对象中加入key-value,key为准备传递数据的字符指示名称,value为准备传递的数据
intent.putExtra(“KEY",data);
startActivity(intent);

在子Activity中获取传递来的数据,如下:

@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
        DataType data= (DataType)getIntent().getDataTypeExtra(”KEY");
}

说明:

1、在onCreate中调用

2、DataType用你需要的数据类型替换

------------------------------------------------------------------------------------------------------------------------------------------

2、从子的Activity中返回数据

如果要在子Activity中返回数据,只需要在子Activity结束前通过Intent对象中加入key-value,如下:

Intent intent = new Intent();
intent.putExtra(“KEY”, data); setResult(RESULT_OK, intent);
this.finish();

说明:

1、setResult(RESULT_OK, intent) 设置子Activity要返回父Activity(打开新Activity的Activity)的信息,RESULT_OK为int值,表子Activity成功执行完毕,intent里面就是包含要返回的数据。

2、记得要关闭哦 finish()在父Activity中如果要接收子Activity的返回结果,需要使用 startActivityForResult(intent, requestCode)打开子Activity,并且要重写 onActivityResult方法

打开子Activity并期待返回结果的代码如下:

............
Intent intent = new Intent(this, DrugLibActivity.class); startActivityForResult(intent, 10);
............ @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (10 == requestCode) { int index = data.getIntExtra(KEY,0); }
}

说明:

1、startActivityForResult 中 requestCode应该为>=0的数值(建议用常量替代更直观)

2、onActivityResult(int requestCode, int resultCode, Intent data)在子Activtiy关闭后,requestCode为启动子Activity时的requestCode值,resultCode为子Activity setResult中设置的值。

3、如果在同一个Activity中有多个地方可调用 startActivityForResult 打开多个子 Activity 的情况,那你应该在 onActivityResult 返回时判断 requestCode,这样你就能搞清楚是哪个子Activity返回了数据。

4、如果在 AndroidManifest.xml 中,你准备打开并接受返回值的子Activity 被设置为 android:launchMode="singleTask"。那很遗憾告诉你,当 startActivityForResult 调用后onActivityResult 会马上执行,而此时子窗体还未返回。

为什么会这样呢?这首先需要我们搞清楚什么是launchMode="singleTask"。

 

发表评论
用户名: 匿名