хорошо я знаю, что есть другие questions, что на первый взгляд сделать это один выглядит как дубликат, но ни один из этих ответов не работает в моем случае,Handling фрагмент backstack в панели навигации
Что я хочу это первый фрагмент отображается чтобы быть похожим на основную активность в отношении того, как работает кнопка «Назад», мне нужен какой-то фрагмент, который я выбираю из своего навигационного ящика, чтобы вернуться к первому фрагменту, когда нажата кнопка «Назад», после чего пользователь покинет приложение, снова нажав его.
Итак, я попытался использовать addToBackStack, и когда я перейду к другому фрагменту, если я нажму кнопку «Назад», он вернется к моему первому фрагменту (точно так, как я хочу), но нажатие кнопки «Назад» снова оставляет меня с белым экраном (я удивляюсь если это связано с анимацией транзакций im, с помощью которой я включил ниже), чтобы обойти это, я попытался переопределить кнопку «Назад» и бросить вызов на финиш(); но это приводит к тому, что какой-то фрагмент im in заканчивается, а не возвращаться к первому фрагменту, ive попробовал несколько обходных решений из вышеупомянутой ссылки и многих других, но не может найти достойное решение каких-либо предложений?
вот мой Основная деятельность DisplayView
private void displayView(int position) {
// update the main content by replacing fragments
Fragment fragment = null;
switch (position) {
case 0:
fragment = new FirstFragment();
break;
case 1:
fragment = new glideFrag();
break;
case 2:
fragment = new secondGlideFrag();
break;
case 3:
fragment = new thirdGlideFrag();
break;
case 4:
fragment = new forthGlideFrag();
break;
case 5:
fragment = new lgFrag();
break;
case 6:
fragment = new cyanFrag();
break;
case 7:
fragment = new sonyFrag();
break;
case 8:
fragment = new SecondFragment();
break;
default:
break;
}
if (fragment != null) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.enter,R.anim.exit,R.anim.pop_enter,R.anim.pop_exit);
//fragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.frame_container, fragment).addToBackStack("first Fragment").commit();
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
mDrawerList.setSelection(position);
setTitle(navMenuTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
} else {
// error in creating fragment
Log.e("MainActivity", "Error in creating fragment");
}
я нашел это, что выглядит как отличный способ вокруг него
private boolean popNext = false;
if(popNext){
if(position == INITIAL_POSITION){
onBackPressed();
mDrawerLayout.closeDrawer(mDrawerList);
popNext = false;
return;
}
getSupportFragmentManager().popBackStackImmediate();
}
else{
if(position == INITIAL_POSITION){
mDrawerLayout.closeDrawer(mDrawerList);
return;
}
popNext=true;
}
, но им все еще достаточно новое для андроид, и им не уверен, что установить INITIAL_POSITION , я попытался
private static final INITIAL_POSITION = 0;
, но без удачи
Это задает много раз. Пожалуйста, ищите SO. –
Я знаю, я читал их, я даже ссылался на один –