带有嵌套片段的导航抽屉 (ViewPager)

Posted

技术标签:

【中文标题】带有嵌套片段的导航抽屉 (ViewPager)【英文标题】:Navigation Drawer with nested fragments (ViewPager) 【发布时间】:2013-09-14 15:42:58 【问题描述】:

我正在编写一个具有Navigation Drawer 并使用嵌套片段的应用程序。 导航抽屉几乎是根据 android 文档创建的 - 它可以工作。 我希望导航抽屉始终可见,这就是为什么我有一个活动,我只是交换片段。其中一个片段是ViewPager,它又拥有自己的片段作为页面。

导航是这样分层的:

- Home
- Fragment 1
-- Subfragment 1.1
-- Subfragment 1.2
-- Subfragment 1.3
- Fragment 2
-- Subfragment 2.1
-- Subfragment 2.2
-- Subfragment 2.3

其中 Fragment 是 ViewPager,而 Subfragments 是它的页面。当我从抽屉中转到Fragment 时,一切正常,但我不知道如何直接切换到ViewPager's 给定页面(嵌套片段)

处理导航抽屉点击的MainActivity:

@Override
protected void onNavItemSelected(int id) 
    switch ((int)id) 
        case 1:
            getSupportFragmentManager().beginTransaction()
            .replace(R.id.content_frame, new MainFragment())
            .addToBackStack(null).commit(); 
            break;
        case 100:
            getSupportFragmentManager().beginTransaction()
            .replace(R.id.content_frame, new Fragment1())
            .addToBackStack(null).commit();
            break;
        case 200:
            getSupportFragmentManager().beginTransaction()
            .replace(R.id.content_frame, new Fragment2())
            .addToBackStack(null).commit();
            break;
        .
        .
        .
        

我想这应该是 getChildFragmentManager()ViewPager's setCurrentItem() 的东西,但我无法在我的主要活动中获得第一个(或不知道如何),我不能使用第二个,因为如果我执行以下操作,则尚未创建寻呼机:

SubFragment11 a = new SubFragment11();
getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, a).addToBackStack(null).commit();
a.setCurrentPagerItem(2);

【问题讨论】:

【参考方案1】:

为 ViewPager 片段提供一个带有变量的 Bundle 来控制所选项目。创建 Viewpager 后,获取该整数并切换到该面板。

【讨论】:

以上是关于带有嵌套片段的导航抽屉 (ViewPager)的主要内容,如果未能解决你的问题,请参考以下文章

Android:导航抽屉片段内的Viewpager

带有 Viewpager2 的关键 FragmentStateAdapter 的片段不再存在

在导航抽屉片段中保存视图页面片段的状态

导航抽屉的片段管理

带有许多片段的 Android 导航抽屉

带有片段的 Android Studio 导航抽屉。工具栏隐藏在下一个片段活动或页面中