Bundle类与Intent配合使用,可以在不同的Activity之间传递数据。
Bundle类的常用方法如下:
putString(String key,String value);//把字符串用键-值形式存放在Bundle对象之中
remove(String key);//移除指定的Key的值
getString(String key);//获取指定的Key的字符。
下面演示一个显示调用+数据传输
//传出数据
public void go(View view){
EditText text1=findViewById(R.id.text1);
EditText text2=findViewById(R.id.text2);
Intent intent=new Intent();
ComponentName comp=new ComponentName(this, SActivity.class);
intent.setComponent(comp);
Bundle bundle=new Bundle();
bundle.putString("text1",text1.getText().toString());
bundle.putString("text2",text2.getText().toString());
intent.putExtras(bundle);
startActivity(intent);
}
取数据
TextView text=findViewById(R.id.hello);
Bundle receive=this.getIntent().getExtras();
String txt1=receive.getString("text1");
String txt2=receive.getString("text2");
text.setText(txt1+","+txt2+"\n");
下面进行隐式调用+数据传输
步骤
1.设置manifest配置文件中接收intent 的消息过滤器
2.创建针对该过滤器的intent对象传递消息。
其实和显示调用的差别很小,修改部分如下
public void go(View view){
EditText text1=findViewById(R.id.text1);
EditText text2=findViewById(R.id.text2);
Intent intent=new Intent();
// ComponentName comp=new ComponentName(this, SActivity.class);
// intent.setComponent(comp);
intent.setAction("second");
Bundle bundle=new Bundle();
bundle.putString("text1",text1.getText().toString());
bundle.putString("text2",text2.getText().toString());
intent.putExtras(bundle);
startActivity(intent);
}
可是问题来了,如果我想把数据返回上一个活动呢?这个时候我们可以做什么呢?
但是,返回上一个活动并没有一个启动活动的Intent来传递数据,这时候我们就可以使用startActivityForresult()来开启一个活动,有两个参数,第一个参数是Intent,第二个是请求码,用于在回调之后判断数据来源。这个用的时候可以进行查阅。
父activity
public void sendMessage(View view){
//相应按钮的事件
EditText msg=findViewById(R.id.message);
String s=msg.getText().toString();
Log.e("sendMessage",s);
Intent intent =new Intent(this ,SecondActivity.class);
this.startActivityForResult(intent,1);
}
//在子activity被销毁之后回调
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
switch(requestCode){
case 1:
if(resultCode == RESULT_OK){
String returnedData=data.getStringExtra("data_return");
Log.e("FirstActivity",returnedData);
}
break;
default:
}
}
}
子
public void closeActivity(View view){
Log.e("activityState","SecondActivity_finish");
Intent intent=new Intent();
intent.putExtra("data_return","hello_firstActivity");
setResult(RESULT_OK,intent);//向上个活动返回数据,两个参数。一个向上层返回处理结果,一个第二个是把带数据的intent传回。
this.finish();
}