您的位置:首页 > 其它

第五天:Bundle数据传递、StartActivityForResult传值

2016-04-23 00:00 411 查看
摘要: Bundle数据传递、StartActivityForResult传值
StartActivityForResult
onActivityResult
setResult

传递步骤:

Intent intent=new Intent(MainActivity.this,secondActivity.class);
Bundle bundle=new Bundle();
//传递基本数据类型
bundle.putInt("age",23);
bundle.putString("name",张三);
//传递对象
Student student=new Student();
student.name="";
student.age="";
bundle.putSerializable("student",student);
//传递集合
ArrayList<String> list=new ArrayList<>();
list.add("sld");
list.add("nothing");
bundle.putStringArrayList("list",list);
intent.putExtras(bundle);
startActivity(intent);

接收步骤:

Intent intent=getIntent();
Bundle bundle=intent.getExtras();
//接收基本数据类型
int age=bundle.getInt("age");
String name=bundle.getString("name");
//接收对象
Student student=(Student)bundle.getSerializable("student");
//接收集合
ArrayList<String> list=bundle.getStringArrayList("list");

StartActivityForResult传值

使用StartActivityForResult传值,如果想在Activity中得到新打开Activity 关闭后返回的数据,需要使用系统提供的startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,新的Activity 关闭后会向前面的Activity传回数据,为了得到传回的数据,必须在前面的Activity中重写onActivityResult(int requestCode, int resultCode, Intent data)方法。

请求码的作用

使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,我们需要为startActivityForResult()方法传入一个请求码(第二个参 数)。请求码的值是根据业务需要由自已设定,用于标识请求来源。例如:一个Activity有两个按钮,点击这两个按钮都会打开同一个Activity, 不管是那个按钮打开新Activity,当这个新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。在onActivityResult()方法如果需要知道新Activity是由那个按钮打开的,并且要做出相应的业务处理,这时可以这 样做:

@Override  public void onCreate(Bundle savedInstanceState) {        ....
button1.setOnClickListener(new View.OnClickListener(){            public void onClick(View v) {
startActivityForResult (new Intent(MainActivity.this, NewActivity.class), 1);
}
});        button2.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
startActivityForResult (new Intent(MainActivity.this, NewActivity.class), 2);
}
&
7fe0
nbsp;      });
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {

switch(requestCode){
case 1:                   //来自按钮1的请求,作相应业务处理
case 2:                   //来自按钮2的请求,作相应业务处理      }      }}

结果码的作用

在一个Activity中,可能会使用startActivityForResult()方法打开多个不同的Activity处理不同的业务,当这 些新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。为了知道返回的数据来自于哪个新Activity,在onActivityResult()方法中可以这样做 (ResultActivity和NewActivity为要打开的新Activity):

public class ResultActivity extends Activity {
.....
ResultActivity.this.setResult(1, intent);
ResultActivity.this.finish();
}
public class NewActivity extends Activity {
......
NewActivity.this.setResult(2, intent);
NewActivity.this.finish();
}
public class MainActivity extends Activity { // 在该Activity会打开ResultActivity和NewActivity
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(resultCode){
case 1:
// ResultActivity的返回数据
case 2:
// NewActivity的返回数据
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: