onActivityResult в фрагментах, не называемых childFragment
Я имею HomeActivity
который содержит много фрагментов в viewpager. Теперь у меня есть 2 фрагмента
AddBalanceFragment
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 фрагмента.
Вам даже не нужно вызывать эти методы вручную во время активности