[英]Navigating back from nested fragments in ViewPager
我需要向用戶顯示多組指令。 對於每個指令(FragmentA),用戶可以導航到另一個屏幕(FragmentA1)。 我使用了一個ViewPager,它保存片段列表。 當用戶導航到第一個片段(FragmentA)時,用戶可以單擊按鈕並移至指令的(FragmentA1)詳細視圖。 因此,viewpager的每個頁面都可以打開另一個片段。
到這里一切正常。 我面臨的問題是與堆棧有關。 使用viewpager適配器的活動處理moveToNext()和moveToPrevious()方法。 下面是我的onBackPressed()方法的實現:
@Override
public void onBackPressed() {
FragmentManager fm = getSupportFragmentManager();
for (Fragment frag : fm.getFragments()) {
if (frag.isVisible()) {
FragmentManager fm = frag.getFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStack();
return;
} else {
moveToPrevious();
return;
}
}
}
super.onBackPressed();
}
上面的實現是:如果我遍歷FragA-> FragA1-> FragB-> FragB1-> FragC-> FragC1當我在FragC1並按返回按鈕時,那么我將直接導航到FragB1而不是FragC,再導航到FragA1 。 我需要遵循與前進相同的路徑。
我不確定出什么問題了,但是它無法彈出嵌套片段並顯示其父片段。 fm.popBackStack()是否不顯示父片段?
我這樣解決了。 獲取可見的片段。 如果沒有子片段可以彈出,請移至上一頁。
@Override
public void onBackPressed() {
FragA fragment = (FragA) pagerAdapter.instantiateItem(viewPager, viewPager.getCurrentItem());
if (fragment.getChildFragmentManager().getBackStackEntryCount() != 0) {
fragment.getChildFragmentManager().popBackStack();
}
else {
moveToPrevious();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.