【问题标题】:How to use onAcitivtyResult into some fragments int Android如何使用 onAcitivtyResult 进入一些片段 int Android
【发布时间】:2019-07-26 13:21:58
【问题描述】:

在我的应用程序中,我有一个 activity (MainActivity) 和一些 fragments (ServicesFragment , NewAddressFragment)。
ServicesFragment 用于 viewPagerNewAddressFragment 使用 getFragmentManager().replace ... 显示此 fragments
在这个fragments 中,我使用了onActivityResult,但在fragments 之一中发生冲突not call 代码onActivityResult 代码在fragments 之一中。
我写了下面的代码,请看这个。
MainActivity :

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Fragment servicesFrag = bottomNavAdapter.getItem(mainViewPager.getCurrentItem());
    if (servicesFrag instanceof ServicesFragment) {
        ((ServicesFragment) servicesFrag).onActivityResult(requestCode, resultCode, data);
    }
}

服务片段:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.e("BazaarPaymentLog", "Result");
    Log.e("BazaarPaymentLog", "bazaarRequestCode : " + bazaarRequestCode);
    if (iabHelper == null) return;

    if (requestCode == bazaarRequestCode) {
        String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA");
        if (resultCode == RESULT_OK) {
            try {
                JSONObject jo = new JSONObject(purchaseData);
                purchaseToken = jo.getString("purchaseToken");
                productId = jo.getString("productId");
                packageName = jo.getString("packageName");

                Log.e("BazaarPaymentLog", "purchaseToken : " + purchaseToken);
                if (iabHelper != null) {
                    iabHelper.handleActivityResult(requestCode, resultCode, data);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    } else {
        super.onActivityResult(requestCode, resultCode, data);
    }
}

新地址片段:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        if (requestCode == REQUEST_TAKE_PHOTO || requestCode == REQUEST_PICK_PHOTO) {
            if (data != null) {
                // Get the Image from data
                Uri selectedImage = data.getData();
                String[] filePathColumn = {MediaStore.Images.Media.DATA};

                Cursor cursor = getActivity().getContentResolver().query(selectedImage, filePathColumn, null, null, null);
                assert cursor != null;
                cursor.moveToFirst();

                int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                mediaPath = cursor.getString(columnIndex);
                cursor.close();

                postPath = mediaPath;
                uploadImageToServer(postPath);
            }

        } else if (requestCode == CAMERA_PIC_REQUEST) {
            if (Build.VERSION.SDK_INT > 21) {
                postPath = mImageFileLocation;
            } else {
                postPath = fileUri.getPath();
            }
            uploadImageToServer(postPath);
        }
    } else if (resultCode != RESULT_CANCELED) {
        Toast.makeText(getActivity(), "Failed", Toast.LENGTH_LONG).show();
    }
}

当在MainActivityServicesFragment 调用 onActivityResult 代码和NewAddressFragment 不调用 onActivityResult 代码中写入onActivityResult 代码。

但是当删除MainActivity 中的onActivityResult 代码时,ServicesFragment 不调用 onActivityResult 代码和NewAddressFragment 调用 onActivityResult 代码。

我该如何解决?

【问题讨论】:

    标签: java android android-fragments onactivityresult


    【解决方案1】:

    在 MainActivity 的 onActivityResult 里面使用这个:

    而不是这个:-

    @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Fragment servicesFrag = bottomNavAdapter.getItem(mainViewPager.getCurrentItem());
    if (servicesFrag instanceof ServicesFragment) {
        ((ServicesFragment) servicesFrag).onActivityResult(requestCode, resultCode, data);
    }
    

    }

    使用这个:-

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    
        for(Fragment fragment : getSupportFragmentManager().getFragments()){
            fragment.onActivityResult(requestCode,resultCode,data);
        }
    
    }
    

    让我知道它是否有效

    【讨论】:

    • 在 supportFragmentManager.fragments 中找不到片段并显示错误!为此,您使用 Kotlin?请发给我真正的代码。我是业余爱好者,真的需要你的帮助。请
    • 使用此代码时,不要调用NewAddressFragment代码的onActivityResult!
    • 在 ServicesFragment 调用代码中,但在 NewAddressFragment 中不调用
    • 在NewAddressFragment中添加与ServiceFragment相同的日志,在if条件之前进行检查。
    【解决方案2】:

    请将此行添加到活动中的onActivityResult

        Fragment servicesFrag = bottomNavAdapter.getItem(mainViewPager.getCurrentItem());
     Fragment addressFrag = findFragmentByTag("NewAddressFragmentTag");
     if (servicesFrag instanceof ServicesFragment) {
     ((ServicesFragment) servicesFrag).onActivityResult(requestCode, resultCode, data);
     }
     if (addressFrag instanceof NewAddressFragment) {
     ((NewAddressFragment) addressFrag).onActivityResult(requestCode, resultCode, data);
     }
     }
    

    【讨论】:

    • 谢谢亲爱的,但没有找到 super.onActivityResult 。我怎么用这个?你能用我上面的代码把完整的代码发给我吗? (mamnoon misham komakam konid mohammad jan)
    • 谢谢亲爱的,但没有找到 super.onActivityResult 。我怎么用这个?你能用我上面的代码把完整的代码发给我吗? (mamnoon misham komakam konid mohammad jan)
    • Vaqti az in code estefade mikonam onActivityResulte marboot be ServicesFragment call nemishe!
    • if (servicesFrag instanceof ServicesFragment) in javabesh true hast?
    • 包,年龄在 benevisam 好的。 vali oonvaqt dg 花瓶 NewAddressFragment kar nemikone!
    【解决方案3】:

    我可以解决我的问题!
    使用以下代码更改 MainActivity 代码:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        Fragment servicesFrag = bottomNavAdapter.getItem(mainViewPager.getCurrentItem());
        Fragment addressFrag = getSupportFragmentManager().findFragmentByTag("NewAddressFragmentTag");
        if (servicesFrag instanceof ServicesFragment) {
            ((ServicesFragment) servicesFrag).onActivityResult(requestCode, resultCode, data);
        }
    
        if (addressFrag instanceof NewAddressFragment) {
            super.onActivityResult(requestCode, resultCode, data);
        }
    }
    

    希望对其他亲爱的开发者有所帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      • 1970-01-01
      • 2020-10-30
      • 2017-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多