从ViewPager中的嵌套片段向后导航

时间:2018-06-21 06:03:43

标签: android android-viewpager back-stack android-nested-fragment fragment-backstack

我需要向用户显示多组指令。对于每个指令(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()不应该显示父片段吗?

1 个答案:

答案 0 :(得分:0)

我这样解决了。获取可见的片段。如果没有子片段可以弹出,请移至上一页。

 @Override
public void onBackPressed() {
    FragA fragment = (FragA) pagerAdapter.instantiateItem(viewPager, viewPager.getCurrentItem());

    if (fragment.getChildFragmentManager().getBackStackEntryCount() != 0) {
        fragment.getChildFragmentManager().popBackStack();
    }
    else {
        moveToPrevious();
    }
}