【问题标题】:Launching a Fragment after ZXing 2.0 QR-Code ScanZXing 2.0 二维码扫描后启动片段
【发布时间】:2012-03-19 04:24:35
【问题描述】:

如果我通过 ZXing 2.0 库执行二维码扫描,我在启动 Fragment 时会遇到一些问题。

我遇到了这个异常:

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { act=com.google.zxing.client.android.SCAN flg=0x80000 (has extras) }} to activity {fraiss.yucrowd/fraiss.yucrowd.activities.ScanQrCode}: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState*

当我执行这段代码时:

@Override
    public void onCreate(Bundle bundle) {
        // TODO Auto-generated method stub
        super.onCreate(bundle);
        setContentView(R.layout.scan_qr_code);

        Intent intent = new Intent("com.google.zxing.client.android.SCAN");
        intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
        startActivityForResult(intent, 0);
    }

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        if (requestCode == 0)
        {
            if (resultCode == RESULT_OK)
            {
                String contents = intent.getStringExtra("SCAN_RESULT");
                String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
                // Handle successful scan
                Log.d("MENU", "Scan result: " + contents + " as " + format);

                // Load details for qr code
                    FragmentTransaction fragmentTransaction = getSupportFragmentManager()
                            .beginTransaction();

                    Fragment fragmentDetails = new FragmentDetails(
                            contents);

                    fragmentTransaction
                            .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
                    fragmentTransaction.replace(R.id.fragment_main,
                            fragmentDetails);
                    fragmentTransaction.addToBackStack(null);
                    fragmentTransaction.commit();  
            }
            else if (resultCode == RESULT_CANCELED)
            {
                // Handle cancel
                Log.d("MENU", "Scan canceled");
            }
        }
    }

我想知道为什么会这样。不能在 ActivityResult 结束时启动 Fragment-Transaction 吗?

提前感谢您的帮助。

【问题讨论】:

    标签: android exception android-fragments qr-code zxing


    【解决方案1】:

    onActivityResult 可以在 onResume 之前被调用,并且您不能在 Activity 至少调用 onResume 之前添加新片段。

    因此,您需要将获得的数据存储在 onActivityResult 中,在 onResume 中检查并在那里执行片段更改。

    【讨论】:

      【解决方案2】:

      这基本上是因为您的活动已暂停,onActivityResultonSaveInstanceState 之后被调用,因此出现消息:“在 onSaveInstanceState 之后无法执行此操作”。保存 requestCode、resultCode 和 Intent 并检查onResume,如果您有任何需要处理的内容。

      【讨论】:

        猜你喜欢
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-22
        • 1970-01-01
        • 2013-01-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多