Harsh Bhavsar
Harsh Bhavsar

Reputation: 1671

onActivityResult in Fragments not called as childFragment

I have HomeActivity that contains many fragments in viewpager. Now i have 2 fragments

  1. AddBalanceFragment

  2. AddSubscriptionFragment

I am calling onActivityResult from both fragments and both have same code. onActivityResult first goes to HomeActivity's onActivityResult Working fine with AddBalanceFragment it goes to addBalanceFragment's onActivityResult but when i am trying to same with AddSubscriptionFragment it also goes to 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) {
         }
       }

Upvotes: 1

Views: 988

Answers (2)

Harsh Bhavsar
Harsh Bhavsar

Reputation: 1671

I got it with static variable state :)

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


        }
    }


}

Upvotes: 1

Deliganli
Deliganli

Reputation: 320

Can you be sure that you are calling

super.onActivityResult(requestCode, resultCode, data);

on fragment's onActivityResult methods.

You shouldn't even need to call these methods manually on activity

Upvotes: 0

Related Questions