У меня есть активность с тремя фрагментами (A, B и C). Фрагмент A добавляется к активности onCreate
, и он также не добавляется к backstack
.Отслеживание фрагментов в активности?
навигация поток для этой активности может быть:
А -> В -> С или А -> С
Нажатие назад или navigateUp
на фрагменты B или C должен вернуться к предыдущему фрагменту.
Код для добавления фрагментов в деятельности:
private void switchFragment(Fragment fragment, boolean addToBackStack) {
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.container_fragments, fragment, fragment.getClass().getSimpleName());
if (addToBackStack) {
ft.addToBackStack(null);
}
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();
currentFragment = fragment;
}
И код, чтобы получить текущий фрагмент:
private Fragment getCurrentFragment(){
FragmentManager fm = getFragmentManager();
if (fm.getBackStackEntryCount() == 0)
return null;
String tag = fm.getBackStackEntryAt(fm.getBackStackEntryCount() - 1).getName();
return getFragmentManager().findFragmentByTag(tag);
}
Я перекрывая onBackPressed
и onNavigateUp
следующим образом:
@Override
public void onBackPressed() {
super.onBackPressed();
currentFragment = getCurrentFragment();
if (currentFragment == null) {
currentFragment = fragmentA;
}
setHeader();
}
@Override
public boolean onNavigateUp() {
if (currentFragment == fragmentA) {
return super.onNavigateUp();
}
else {
getFragmentManager().popBackStack();
currentFragment = getCurrentFragment();
if (currentFragment == null) {
currentFragment = fragmentA;
}
setHeader();
return true;
}
}
setHeader
- это способ изменения заголовок текста операции в зависимости от текущего отображаемого фрагмента.
Вышеуказанные работы, если я перемещаюсь от А до С и назад. Однако для перехода с A на B на C и обратно не работает. Когда вы возвращаетесь с C на B, код думает, что он уже на A (отображается текст заголовка для A), но отображается фрагмент B.
Вышеупомянутый не правильный способ обращения с задней стопой? Что я делаю не так?
просто зарегистрируйтесь onBackPress, что count> 0, чем pop-фрагмент, и напишите код setHeader в onCreateView фрагмента. – Harry