【问题标题】:Navigating back from nested fragments in ViewPager从 ViewPager 中的嵌套片段导航回来
【发布时间】:2018-06-21 06:03:42
【问题描述】:

我需要向用户显示多组指令。对于每条指令(FragmentA),用户可以导航到另一个屏幕(FragmentA1)。我使用了一个包含片段列表的 ViewPager。当用户导航到第一个片段(片段A)时,用户可以单击一个按钮并移动到指令的(片段A1)详细视图。因此,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() 不应该显示父片段吗?

【问题讨论】:

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


    【解决方案1】:

    我是这样解决的。获取可见的片段。当没有要弹出的子片段时,只需移至上一页。

     @Override
    public void onBackPressed() {
        FragA fragment = (FragA) pagerAdapter.instantiateItem(viewPager, viewPager.getCurrentItem());
    
        if (fragment.getChildFragmentManager().getBackStackEntryCount() != 0) {
            fragment.getChildFragmentManager().popBackStack();
        }
        else {
            moveToPrevious();
        }
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-17
    相关资源
    最近更新 更多