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

Android 导航抽屉-默认显示主片段,android,android-fragments,Android,Android Fragments,我已将导航抽屉连接到我的应用程序的主活动。 导航抽屉有4个选项,将用户导航到4个不同的片段f1、f2、f3和f4 我已经创建了一个主页Fragmentfh。 我没有在导航抽屉中添加fh作为选项 fh片段填充进行http调用的数据 每当用户选择f1、f2、f3或f4时;各个片段需要显示出来 直到这里一切都很好 然而,每当用户按下后退按钮时,fh应显示出来。即,内容框架应包含fh。 我不能做这部分 现在,每当用户按下后退按钮时,默认视图为空 另外,由于fh发出http调用来填充数据,所以需要显示添加

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

我已经创建了一个主页
Fragment
fh。 我没有在导航抽屉中添加fh作为选项

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

每当用户选择f1、f2、f3或f4时;各个片段需要显示出来

直到这里一切都很好

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

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

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

以下是我的实现:

main活动-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()上调用一次

MainActivity 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>

我的解决方法是

private int getFragmentCount() {
    return getSupportFragmentManager().getBackStackEntryCount();
}
在你的活动中

@Override
public void onBackPressed() {
    if(getFragmentCount()>0) {
     getSupportFragmentManager().popBackStackImmediate();
    }else{
        super.onBackPressed();
    }
}

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

仅在activity
onCreate
上调用setUpLandingFragment一次

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();
        }
这个解决方案最酷的部分是,完全不需要反压。

好得多。:)。每当我按下后退键,我都可以看到默认的fh。唯一的问题是fh重新加载数据。请参阅此链接
private void changeFrag (Fragment f) {
            FragmentManager fragmentManager = getSupportFragmentManager();
            fragmentManager.popBackStack();
            fragmentManager.beginTransaction()
                    .add(R.id.content_frame, f).addToBackStack("fragBack").commit();
        }