安卓开发之Activity间传输数据(多场景分析)

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渣渣高不会写Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值