Reputation: 1671
I have HomeActivity
that contains many fragments in viewpager. Now i have 2 fragments
AddBalanceFragment
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
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
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