【问题标题】:Navigation Drawer- Displaying home fragment as default导航抽屉 - 默认显示主页片段
【发布时间】:2015-07-23 04:49:27
【问题描述】:

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

我已经创建了一个主页Fragmentfh。 我没有在 Navigation Drawer 中添加 fh 作为选项。

Fragment fh 填充数据进行 http 调用。

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

到这里一切正常。

但是,每当用户按下返回按钮时,都会显示 fh。 IE。 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 布局:

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

【问题讨论】:

    标签: android android-fragments


    【解决方案1】:

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

    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 根本不需要。

    【讨论】:

      【解决方案2】:

      我的解决方法是

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

      在你的活动中

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-25
      • 1970-01-01
      • 2020-05-16
      • 1970-01-01
      相关资源
      最近更新 更多