onActivityResult в фрагментах, не называемых childFragment

Я имею HomeActivity который содержит много фрагментов в viewpager. Теперь у меня есть 2 фрагмента

  1. AddBalanceFragment

  2. AddSubscriptionFragment

я звоню onActivityResult из обоих фрагментов и оба имеют одинаковый код. Сначала onActivityResult отправляется в HomeActivity onActivityResult Работает нормально с AddBalanceFragment это идет к addBalanceFragment's onActivityResult но когда я пытаюсь сделать то же самое с AddSubscriptionFragmentэто также идет к AddBalanceFragment's onActivityResult

//nestedfragments contains 4 fragments   3rd is addBalanceFragment and 4th AddsubsprtionFragment


// HomeActivity.java

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Log.e(TAG, "onActivityResult");
    // notifying nested fragments (support library bug fix)
    final FragmentManager childFragmentManager = getSupportFragmentManager();

    if (childFragmentManager != null) {
        final List<Fragment> nestedFragments = childFragmentManager.getFragments();

        if (nestedFragments == null || nestedFragments.size() == 0) return;

        for (Fragment childFragment : nestedFragments) {
            if (childFragment != null && !childFragment.isDetached() && !childFragment.isRemoving()) {

                childFragment.onActivityResult(requestCode, resultCode, data);
            }
        }
    }
}

AddBalanceFragment.java

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


    if (requestCode == 1001) {
        if (resultCode == -1) {
         }
       }

AddSubscriptionFragment.java

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


    if (requestCode == 1001) {
        if (resultCode == -1) {
         }
       }

2 ответа

Я получил это со статической переменной состояния:)

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Log.e(TAG, "onActivityResult HomeActivity");
    // notifying nested fragments (support library bug fix)

    final List<Fragment> nestedFragments = getSupportFragmentManager().getFragments();
    for (int i = 0; i < nestedFragments.size(); i++)
        if (nestedFragments == null || nestedFragments.size() == 0) return;

    for (Fragment childFragment : nestedFragments) {
        if (childFragment != null && !childFragment.isDetached() && !childFragment.isRemoving()) {
            Log.e(TAG, "childFragment :" + childFragment.toString());
            //   Log.e(TAG, "childFragment :"+childFragment.getParentFragment().getTag());

            if (state.equalsIgnoreCase("AddBalance")) {
                if (childFragment.toString().contains("AddBalanceFragment")) {
                    childFragment.onActivityResult(requestCode, resultCode, data);
                }
            }
            if (state.equalsIgnoreCase("AddSubcription")) {
                if (childFragment.toString().contains("AddSubscriptionFragment")) {
                    childFragment.onActivityResult(requestCode, resultCode, data);
                }
            }


        }
    }


}

Можете ли вы быть уверены, что звоните

super.onActivityResult(requestCode, resultCode, data);

на методы onActivityResult фрагмента.

Вам даже не нужно вызывать эти методы вручную во время активности

Другие вопросы по тегам