Activity之间传输数据

本文将介绍activity之间传输数据的几种方式
温馨提示:本文附加的代码块都是放置在button监听事件中的

对于activity之间传输数据需要使用intent

场景1:简单的传输数据到下一个Activity

传输方:

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来传输数据

场景2 如何用配合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+"");

接下来还有一个场景,假如我想传输一个数据,当接收方处理完,立刻返回数据或者接收到数据时立刻返回一个特定的值,这样的场景该如何实现

场景3

第一步:与之前存放数据相同,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。这说明我们可以接受到传回的很多数据

场景4:使用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的监听事件中,第一个界面中,点击即可将输出传递并跳转到第二个活动,在第二个界面点击即可显示数据内容或回输数据。