我正在做一個基於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>
我在這裏做錯了什麼?什麼是實施這個的正確方法?
謝謝。
仍然一樣! – Zach