本文将介绍activity之间传输数据的几种方式
温馨提示:本文附加的代码块都是放置在button监听事件中的
对于activity之间传输数据需要使用intent
传输方:
Intent intent=new Intent(MainActivity.this,MainActivity2.class);
intent.putExtra("ggzx","ggzx");
intent.putExtra("ggzx2",100);
intent.putExtra("ggzx2",100);
startActivity(intent);
接收方:
String ggzx=getIntent().getStringExtra("ggzx");
textView.setText(ggzx);
int ggzx2=getIntent().getIntExtra("ggzx2",0);
textView2.setText(ggzx2+"");
这里两个代码块我都是放在两个按钮的onClick中,在第一个界面点击即可跳转页面,第二个页面点击更新textview
这里intent还可以使用bundle来传输数据
如何用配合intent和bundle来传输数据。
传输方
Intent intent=new Intent(MainActivity.this,MainActivity2.class);
Bundle bundle=new Bundle();//创建一个bundle
bundle.putString("ggzx","ggzx");//往bundle存放数据
bundle.putInt("ggzx2",100);
intent.putExtra("bundle",bundle);//给bundle命名再放进intent
startActivity(intent);
接收方
Bundle bundle=getIntent().getBundleExtra("bundle");//获取bundle
textView.setText(bundle.getString("ggzx"));
int ggzx2=bundle.getInt("ggzx2");
textView2.setText(ggzx2+"");
接下来还有一个场景,假如我想传输一个数据,当接收方处理完,立刻返回数据或者接收到数据返回一个特定的值,这样的场景该如何实现
第一步:与之前存放数据相同,startActivity更换成startActivityForResult(intent,999)
这里我使用999作为一个requestCode,在onActivityForResult中,需要确定请求码相同
第二步:在oncreate中
if(getIntent()!=null)
{
setResult(RESULT_OK);//设置resultCode
}
setResult后,主活动中的onActivityResult会接受到一个resultCode,当确定resultCode和requestCode都相同后,才可以确定是由第二个活动回输的数据,可以执行特定操作
第三步
protected void onActivityResult(int requestCode,int resultCode,@Nullable Intent data){
super.onActivityResult(requestCode,resultCode,data);
if(requestCode==999 && resultCode==RESULT_OK){
button.setText("收到回复");
//其他操作
}
}
这里我们就完成了,大概解释一下过程,使用startActivityForResult时,第二个活动中接受到数据后,设置setResulet后,第一个活动可以在onActivityResult中接收到一个resultCode。
注意:该方法的第三个参数,第二个活动中甚至可以回传intent。这说明我们可以接受到传回的很多数据
使用intent的情况下
传输方/接受回输数据方:onCreate中的button的监听事件
Intent intent=new Intent(MainActivity.this,MainActivity2.class);
startActivityForResult(intent,999);
onActivityResult中
super.onActivityResult(requestCode, resultCode, data);
if (requestCode==999 && resultCode== RESULT_OK)
{
assert data != null;
int ggzx=data.getIntExtra("ggzx",0);
if (ggzx!=0)
textView.setText(ggzx+"");
else
textView.setText("0");
}
接收方:
if (getIntent()!=null){
Intent intent=new Intent();
intent.putExtra("ggzx",100);
setResult(RESULT_OK,intent);//设置resultcode
}
本文的附上的所有代码都是放在button的监听事件中,第一个界面中,点击即可将输出传递并跳转到第二个活动,在第二个界面点击即可显示数据内容或回输数据。