在Fragment中没有调用onActivityResult

时间:2016-01-22 11:53:04

标签: android-studio zbar

在我的片段中onActivityResult没有在startActivityForResult之后调用。我已经尝试过以下内容: 1)在startActivityResult

之前添加getParentFragment,getActivity

2)在清单上添加了android:configChanges =“orientation | screenSize”

3)onActivityResult is not being called in Fragment

4)在ZbarScanner活动中检查了finish()方法

Intent dataIntent = new Intent();
                    dataIntent.putExtra(SCAN_RESULT, symData);
                    dataIntent.putExtra(SCAN_RESULT_TYPE, sym.getType());
                    setResult(Activity.RESULT_OK, dataIntent);
                    finish();

5)错误 - [ResultInfo {who = null,request = 196609,result = -1,data = Intent {(has extras)}}]} checked intent的值为null,我们正在传递

if (isCameraAvailable()) {
                    Intent intent = new Intent(this.getActivity(), ZBarScannerActivity.class);
                    intent.putExtra(ZBarConstants.SCAN_MODES, new int[]{Symbol.QRCODE});

                  startActivityForResult(intent, 1);


                    Toast.makeText(getActivity(), "inside case", Toast.LENGTH_SHORT).show();


                } else {
                    Toast.makeText(getActivity(), "Rear Facing Camera Unavailable", Toast.LENGTH_SHORT).show();
                }

---- onActivityResult ------

  @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {

            super.onActivityResult(requestCode, resultCode, data);
            Bundle bundle = data.getExtras();


            switch (requestCode) {
                case ZBAR_SCANNER_REQUEST:
                case ZBAR_QR_SCANNER_REQUEST:
                    if (resultCode == getActivity().RESULT_OK) {


                        Toast.makeText(getActivity(), "Scan Result = " + data.getStringExtra(ZBarConstants.SCAN_RESULT), Toast.LENGTH_SHORT).show();

                    } else if (resultCode == getActivity().RESULT_CANCELED && data != null) {
                        String error = data.getStringExtra(ZBarConstants.ERROR_INFO);
                        if (!TextUtils.isEmpty(error)) {
                            Toast.makeText(getActivity(), error, Toast.LENGTH_SHORT).show();
                        }
                    }}

3 个答案:

答案 0 :(得分:2)

我在MainActivity上调用了onActivityResult,并且没有调用.so删除了switch case。现在它正在工作

switch (requestCode) {
            case ZBAR_SCANNER_REQUEST:
            case ZBAR_QR_SCANNER_REQUEST:

答案 1 :(得分:0)

片段onActivityResult是一个非常常见且已知的问题。我已经用一种方式解决了它,也可能有其他方法。

Fragment移动到Activity时设置标记。

fragmentManager.beginTransaction().replace(R.id.frame_container, fragment,"tag").commit();

现在在onActivityResult的{​​{1}}中写下以下代码。

Activity

答案 2 :(得分:0)

在片段中使用FragmentPagerAdapter时,我遇到了类似的问题。问题是我用片段PagerAdapter初始化了我的FragmentManager,我替换了:

new MyPagerAdapter(getChildFragmentManager());

new MyPagerAdapter(getFragmentManager());

因此,可能需要检查您正在使用的FragmentManager。我对这种方法并不是百分之百满意,因为调用片段FragmentManager似乎是正确的。但我还没有时间进一步检查它。