0

У меня есть одно действие, содержащее один контейнер, который получит 2 фрагмента. Как только инициализирует активности я начать первый фрагмент с:Андроид фрагмент простой backstack

showFragment(new FragmentA()); 

private void showFragment(Fragment fragment) { 
    getSupportFragmentManager().beginTransaction() 
      .replace(R.id.container, fragment, fragment.getTag()) 
      .addToBackStack(fragment.getTag()) 
      .commit(); 
} 

Затем, когда пользователь нажимает на Fragmenta, я получаю этот щелчок на уровне активность и зову:

showFragment(new FragmentB()); 

Теперь, когда я нажимаю назад кнопка возвращается в фрагмент A (это правильно), и когда я нажимаю кнопку назад, он показывает пустой экран (но остается в той же активности). Я бы хотел, чтобы он просто закрыл приложение (так как у этого действия нет родителя).

Есть много сообщений, связанных с фрагментами и backstack, но я не могу найти простое решение для этого. Я хотел бы избежать случая, когда мне нужно проверить, не делает ли im back on Fragment A или Fragment B, так как я могу расширить количество фрагментов, и мне нужно будет поддерживать этот метод.

ответ

0

Вы получаете пустой экран, потому что, когда вы добавляете первый фрагмент, вы являетесь calling addToBackStack(), из-за чего вы добавляете пустой экран бессознательно!

теперь, что вы можете сделать, это вызвать следующий метод в onBackPressed() и ваша проблема будет решена

public void moveBack() 
    { 
//FM=fragment manager 
     if (FM != null && FM.getBackStackEntryCount() > 1) 
     { 
      FM.popBackStack(); 
     }else { 
      finish(); 
     } 
    } 

НЕ ЗВОНИТЬ СУПЕР В ONBACKPRESSED();

просто позвоните вышеуказанному методу!

+0

Моя проблема заключалась в том, что я не понимал, что добавляю пустой экран обратно в стек, не зная:/Затем проверяем, разрешает ли проблема FM.getBackStackEntryCount()> 1. Благодаря! – Bugdr0id

+0

Фрагмент концепции очень сложно и просто! в любом случае рады помочь! –

0

addToBackStack (fragment.getTag())

использовать его для фрагмента B, а не для фрагмента А

0

Я думаю, что ваш фрагмент А не выскочила правильно, попробуйте использовать добавить фрагмент, а заменить на иметь надлежащую поддержку навигации, однако вы можете проверить счетчик обратно стека с помощью:

FragmentManager fragmentManager = getSupportFragmentManager(); 
int count = fragmentManager.getBackStackEntryCount(); 

и вы также можете непосредственно вызывать finish() активности onBackPressed() когда вы хотите, чтобы ваша деятельность, чтобы закрыть на определенное кол-фрагмента.