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

时间:2015-07-23 04:49:28

标签: android android-fragments

我已将导航抽屉附加到我的应用程序的主Activity。 导航抽屉有4个选项,可以将用户导航到4个不同的片段f1,f2,f3和f4。

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

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

每当用户选择f1,f2,f3或f4时;需要显示相应的片段。

直到这里一切正常。

但是,每当用户按下后退按钮时,都应显示fh。即。 content_frame应该包含fh。 我无法做到这一点。

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

此外,由于fh进行http调用以填充数据,因此需要显示添加到堆栈的fh。

这是我的实施:

MainActivity- 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函数,在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();
    }

MainActivity XML Layout:

<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 个答案:

答案 0 :(得分:2)

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

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

在活动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();
        }

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

答案 1 :(得分:1)

我的工作是

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

在您的活动中

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