关于请求码requestCode 和 结果码resultCode 以及 Bundle

 

目录

 作用和用法

请求码和结果码

Bundle

代码实例 

在原act中为某一个意图设置请求码: 

 在新的act设置结果码

 在原act处理请求码和结果码

Bundle实例化以及存放数据

取出bundle和bundle数据 


 作用和用法

请求码和结果码

​​​​用set.Result()设置结果码                            一般在新act设置
用startActivityForResult()设置请求码                一般在原act设置

请求码是用来标识请求源的(是哪个intent),结果码是用来标识结果源的(从哪个act返回)。

在void onActivityResult()中处理结果码和请求码
     {
      请求码用于判断从哪个act返回
      结果码用于判断哪个act返回的数据
     }

Bundle

用来存放数据信息,而bundle是放在intent里,通过intent来传输数据

 一般用    bundle.putString(key,value);    bundle.putInt(key,value);(以此类推)存放信息

用 intent.putExtra(key,bundle);把bundle放入intent中,

用 Bundle bundle = intent.getBundleExtra(key); 取出bundle,

 用bundle.getString(key) (以此类推)取出bundle中的数据

代码实例 

在原act中为某一个意图设置请求码: 

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button1 = findViewById(R.id.button1);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent intent = new Intent(MainActivity.this,SecondActivity.class);
                startActivityForResult(intent,2);    //请求码为2
            }
        });

 在新的act设置结果码

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

       
        Intent intent = new Intent();
        setResult(2,intent);
    }

 

 在原act处理请求码和结果码

@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent intent) {
        super.onActivityResult(requestCode, resultCode, intent);
//当从别的页面返回时,会识别请求码,和结果码

        Toast.makeText(this,                          //判断是哪个act返回,使用请求码
                "从第"+requestCode+"个 activity 返回",
                Toast.LENGTH_LONG).show();

        if (resultCode == 3){        
                                                            //判断是哪个act返回的数据,使用结果码
            String string = intent.getStringExtra("第三个页面的数据");
            Toast.makeText(this,string,Toast.LENGTH_SHORT).show();
        }else if (resultCode == 2){
            
            Toast.makeText(this, "第二个页面无数据", Toast.LENGTH_SHORT).show();
        }
    }
}

Bundle实例化以及存放数据

button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
       
                Bundle bundle = new Bundle();                   //相当于信息载体
                bundle.putString("name","张三");              //键值对数据存入Bundle对象
                bundle.putInt("age",20);
                intent.putExtra("data",bundle);         //通过intent对象携带bundle数据

                startActivityForResult(intent,3);  //请求码为3
            }
        });

 

取出bundle和bundle数据 

public class ThirdActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_third);

        String receiver = "接收的数据如下:\n";
        Intent intent = getIntent();                            //获得启动当前活动时的Intent内容。

        Bundle bundleData = intent.getBundleExtra("data");       //获取捆绑数据
        receiver += "name:" + bundleData.getString("name") + "\n";
        receiver += "age:" + bundleData.getInt("age");

        Toast.makeText(this, receiver, Toast.LENGTH_LONG).show();

        intent = new Intent();
        intent.putExtra("第三个页面的数据","how are you?");   //携带为捆绑的数据
        setResult(3,intent);                        //结果码为3
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ice冰山

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

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

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

打赏作者

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

抵扣说明:

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

余额充值