Android中关于Activity之间传值的问题(基础问题)

也是Android中的一种基础知识点吧,希望还是帮助理解吧,虽然简单点了,献给需要的人群,仅供参考。

关于两个Activity之间传值的问题,首先要搞清楚两个activity那个是父类,那个是子类,通常父类是想要结果,而让子类帮他处理,做完以后将结果回传给父类,我的父类是ZxingActivity.java,而子类是SimpleCaptureActivity.java.我以扫描二维码为例简单说一下吧。请按照核心代码注释的顺序走,你会理解的。

首先看父类ZxingActivity.java中的核心代码。

public void onClick(View v) {
    switch (v.getId()) {
        //打开框扫描
        case R.id.btn_switch:
            changeLight();
            //1.父类包装数据,给子类布置任务,我需要什么结果,
            Bundle bundle = new Bundle();
            bundle.putString("data", "data");
            Intent intent = new Intent(ZxingActivity.this, SimpleCaptureActivity.class);
            intent.putExtras(bundle);
            //2.当我给子类告诉完消息之后,告诉子类我是需要返回结果的,因此要通过startActivityForResult()方法,这时候请求就发送给了子类
            startActivityForResult(intent,001);
            break;


SimpleCaptureActivity.java中的核心代码,代码执行的顺序请参照注释的顺序

@Override
protected void handleResult(final String resultString) {
    if (TextUtils.isEmpty(resultString)) {
        Toast.makeText(mActivity, io.github.xudaojie.qrcodelib.R.string.scan_failed, Toast.LENGTH_SHORT).show();
        restartPreview();
    } else {
        if (mDialog == null) {
            mDialog = new AlertDialog.Builder(mActivity)
                    .setMessage(resultString)
                    .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            //3.子类收到了父类的问题,
                            Intent intent1 = getIntent();
                           // 4.开始回答父亲的问题,将自己的答案给父类的intent
                            intent1.putExtra("myresuly", resultString);
                            //5.子类将自己的响应码和设置的结果通过setResult(002,intent1)返回给父类,
                            // 这时候父类就需要重写onActivityResult()方法显示结果了
                            setResult(002, intent1);
                            finish();
                        }
                    })
                    .create();

此时,子类完成了父类的任务,此时父类就要验货了,看看子类给的是不是他想要的结果了,因此又回到了父类ZxingActivity.java中,通过重写onActivityResult()方法来验收子类给的结果。

//6.处理子类带回来的结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode==REQUEST_OK  && resultCode==RESPONSE_OK){
        Bundle bundle=data.getExtras();
        String dataResult=bundle.getString("myresuly");
        Log.i("res","拿到结果了吗?"+dataResult);
        mQRCodeResult.setText(bundle.getString("myresuly"));
    }
}

这样就搞定了两个Activity之间的传值问题,希望能够帮到你哦,我是小萝莉。

发布了8 篇原创文章 · 获赞 4 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/honey_angle_first/article/details/73165929