当前位置: 首页 > 知识库问答 >
问题:

导航抽屉-默认显示主片段

韩麒
2023-03-14

我已将导航抽屉连接到我的应用程序的主活动。导航抽屉有4个选项,将用户导航到4个不同的片段f1、f2、f3和f4。

我已经创建了一个主页片段fh。我不会在导航抽屉中添加fh作为选择。

fh片段填充进行http调用的数据。

每当用户选择f1、f2、f3或f4时;需要返回相应的片段。

直到这里一切都很好。

然而,每当用户按下后退按钮时,应显示fh。即content\u框架应包含fh。我不能做这部分。

现在,每当用户按下后退按钮时,默认视图为空白。

此外,由于fh发出http调用来填充数据,所以需要显示添加到堆栈中的fh。

这是我的实现:

主要活动-OnCreate

mDrawerLayout.closeDrawer(mDrawerList);
setUpHomeFragment();

这是我如何管理片段,在抽屉菜单项点击...

private void showFrg(Fragment fragment){

   FragmentManager fragmentManager = getSupportFragmentManager();
   FragmentTransaction fragmentTransaction =  fragmentManager.beginTransaction();
   fragmentTransaction.addToBackStack(null);
   fragmentTransaction.replace(R.id.content_frame, fragment).commit();
}

setUpHomeFragment函数,仅在activity oncreate()上调用一次

private void setUpHomeFragment(){
        mLandingPageFragment=new ReadyMyOrderCollections();
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction ft = fragmentManager.beginTransaction();
        ft.replace(R.id.content_frame, mLandingPageFragment);
        ft.addToBackStack(null);
        ft.commit();
    }

Mainactive XML布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <include layout="@layout/toolbar" />

    <android.support.v4.widget.DrawerLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <FrameLayout
            android:id="@+id/content_frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <include
            android:layout_width="@dimen/drawer_width"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            layout="@layout/list_view" />
    </android.support.v4.widget.DrawerLayout>

</LinearLayout>

共有2个答案

邓令雪
2023-03-14

我的工作是

private int getFragmentCount() {
    return getSupportFragmentManager().getBackStackEntryCount();
}

在您的活动中

@Override
public void onBackPressed() {
    if(getFragmentCount()>0) {
     getSupportFragmentManager().popBackStackImmediate();
    }else{
        super.onBackPressed();
    }
}
顾英发
2023-03-14

我在这里找到了解决这个问题的最干净的方法:

https://stackoverflow.com/a/21093352/1348550

仅在活动onCreate上调用setUpLandingFraank一次。

private void setUpLandingFragment(){
        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.popBackStack();
        fragmentManager.beginTransaction()
                .add(R.id.content_frame, new LandingFragment()).commit();
    }

在导航抽屉项目上,单击:

private void changeFrag (Fragment f) {
            FragmentManager fragmentManager = getSupportFragmentManager();
            fragmentManager.popBackStack();
            fragmentManager.beginTransaction()
                    .add(R.id.content_frame, f).addToBackStack("fragBack").commit();
        }

这个解决方案最酷的部分是,根本不需要onBackPressed。

 类似资料:
  • 我正在为我的应用程序实现一个导航抽屉。现在,除了一个小故障外,它工作正常。当我设置导航抽屉图标(ic_Drawer)来替换常规的“HomeAsUp”插入符号图标时,我仍然得到箭头。导航抽屉图标不显示。我已经实现了android开发者网站上的每一种方法。但它似乎不起作用。 以下是我的代码:

  • 我有一些问题切换导航抽屉功能到较低级别片段上的功能。我读了这个线程来显示向上的指示器。但当按下按钮时,它将打开导航抽屉,而不是回到以前的片段。并且我不能将EditUserFragment中的操作栏标题设置为“编辑配置文件”。我正在使用Android Studio中提供的导航抽屉模板。 我有三个层次: 包含主页和配置文件项的导航抽屉的主活动 标题为“配置文件”的UserFragment EditUs

  • 我有一个关于片段管理的问题。 我已经编写了一个基于碎片的抽屉活动。每次点击菜单项后,您都会看到一个空片段。 我如何实现这一点?

  • 我目前正在为我的Android应用程序使用导航抽屉。在我的第一个片段中,有一个片段使用Facebook的Graph API加载数据。因此,当我的应用程序第一次加载时,它首先进入第一个片段。 然后,我使用导航抽屉单击另一个片段并查看它。 最后,我重用导航抽屉返回第一个片段并查看它。 我面临的问题是,我如何继续利用已经创建过一次的片段,而不是在选择导航抽屉项时重新创建它。我的片段切换代码如下所示。 我

  • 在sherlock actionbar中使用导航抽屉,但我无法让3行图标(像gmail一样)显示出来,而不是正常的向上按钮“<”。这是我的代码ic_drawer是gmail使用的3行图标

  • 在阅读了关于片段和活动的文档和讨论后,我想我已经把情况弄清楚了。 活动应该为用户提供一个屏幕,用户可以在其中工作。导航到其他屏幕通常会破坏活动。 片段应该提供很少或单个功能组件,可以在活动中再次使用。片段的内容应该相互独立地工作,因此可以在多个活动中重用。 虽然这一切似乎都有道理,但有一件事我无法理解: 如果您创建一个新的Android应用程序,并选择创建Android导航抽屉应用程序的选项,为什