繁体   English   中英

如何在Android中使用onAcitivtyResult分解成一些片段

[英]How to use onAcitivtyResult into some fragments int Android

在我的应用程序中,我有一个activityMainActivity )和一些fragmentsServicesFragmentNewAddressFragment )。
在使用ServicesFragment viewPagerNewAddressFragment使用getFragmentManager().replace ...作秀这个fragments
在这个fragments ,我用onActivityResult ,但在一赠冲突fragments 不会调用的代码onActivityResult码中的一个fragments
我写下面的代码,请看这里。
主要活动 :

@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);
    }
}

ServiceFragment:

@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);
    }
}

NewAddressFragment:

@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();
    }
}

当在MainActivity编写onActivityResult代码时,在ServicesFragment 调用 onActivityResult代码,而在NewAddressFragment 不调用 onActivityResult代码。

但是,当在MainActivity删除onActivityResult代码时,在ServicesFragment 不要调用 onActivityResult代码,而在NewAddressFragment 请调用 onActivityResult代码。

我该如何解决?

在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);
    }

}

让我知道它是否有效

请将此行添加到活动的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);
 }
 }

我可以解决我的问题!
用以下代码更改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);
    }
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM