Я делаю приложение NavigationDrawer. У меня есть иерархия, как приведено нижеAndroid Fragment не добавлен в Back Stack
NavigationDrawer -> RootFragment (не добавляется к спине Stack) -> Подробный Фрагмент (Добавлен Назад Stack)
Теперь я пытаюсь показать сообщение пользователю, когда он пытается выйти из приложения, нажав кнопку «Назад». Вот код, который я использую для него.
@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();
}
}
Вот как я называю фрагмент детали из корневого фрагмента.
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