簡體   English   中英

從ViewPager中的嵌套片段向后導航

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM