3

我正在做一個基於NavigationDrawer的應用程序。我有一個層次結構如下圖所示Android片段未添加到返回堆棧

NavigationDrawer給 - > RootFragment(不添加到後退堆棧) - >詳細 片段(添加到後退堆棧)

現在,我試圖展現通過按下返回按鈕嘗試退出應用程序時向用戶發送消息。這是我用它的代碼。

@Override 
    public void onBackPressed() { 
     if (getFragmentManager().getBackStackEntryCount() > 0) { 
      getFragmentManager().popBackStack(); 
     } 
     else if (getFragmentManager().getBackStackEntryCount() == 0) { 
      new AlertDialog.Builder(this) 
        .setMessage("Are you sure you want to exit?") 
        .setCancelable(false) 
        .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int id) { 
          MainActivity.this.finish(); 
         } 
        }) 
        .setNegativeButton("No", null) 
        .show(); 

     } 
     else 
     { 
      super.onBackPressed(); 
     } 
    } 

當我點擊返回按鈕從細節片段,它被添加到回棧,我收到警報消息。相反,我會除了回到根片段。

但是,如果我更新這樣的代碼,按後退按鈕使用戶回到根視圖。所以它看起來像getFragmentManager()。getBackStackEntryCount()是零,即使詳細片段被添加到回棧中。

@Override 
    public void onBackPressed() { 
     if (getFragmentManager().getBackStackEntryCount() > 0) { 
      getFragmentManager().popBackStack(); 
     } 
     else 
     { 
      super.onBackPressed(); 
     } 
    } 

這裏是我如何從rootFragment調用細節片段。

FragmentManager fragmentManager = getFragmentManager(); 
       Fragment fragment = SubCategoryListFragment.newInstance(false); 
       fragmentManager.beginTransaction() 
         .add(R.id.subCategoryDetails, fragment) 
         .addToBackStack(null) 
         .commit(); 

這是從導航抽屜側面菜單打開的根視圖。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 


    <android.support.v7.widget.RecyclerView 
     android:id="@+id/categoriesRecyclerView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@android:color/transparent" 
     android:cacheColorHint="@android:color/transparent"/> 

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


</FrameLayout> 

我在這裏做錯了什麼?什麼是實施這個的正確方法?

謝謝。

回答

3

您使用支持片段假設,你有你的活動使用getSupportFragmentManager()。使用getFragmentManager()您將獲得本機片段管理器。但是,在支持片段類中,getFragmentManager()返回支持片段管理器,這可能有點令人困惑。

0

傳遞一個有效的標籤,而不是空在此聲明

addToBackStack(null) 
+0

仍然一樣! – Zach