Мне нужно создать навигация фрагментов, как в приложении Gmail. Это похоже на: у нас есть один основной фрагмент A, мы можем открыть другой фрагмент (B, C, D ...) из навигационного ящика, а когда мы открываем новый фрагмент, он открыт поверх основного фрагмента и при нажатии , во всех случаях мы возвращаемся к основному фрагменту A, не зависим от количества новых открытых фрагментов. Кажется, первый основной фрагмент A мы используем метод add (int FragmentTransaction) без добавления фрагмента backStack. Затем, следующий фрагмент B, мы также используем метод add, добавив в задний стек. И когда мне нужно открыть еще один (фрагмент C), мне нужно заменить второй фрагмент B. Но когда я использую метод replace(), заменяю все контейнер, а основной фрагмент A не отображается, когда обратная кнопка нажата из фрагмента C или B и приложение близко. Итак, возникает вопрос: как заменить только фрагмент B или C без потери фрагмента A?Фрагменты навигации
ответ
правильное решение будет иметь два контейнера framelayouts в вашей деятельности. Первый (который будет ниже другого) содержит фрагмент A. Все, что вы открываете, будет добавлено/заменено во втором контейнере.
Другим решением является включение фрагмента А статически в макете, и ваш контейнер framelayout поверх него, где вы добавляете свои фрагменты B, C, D и т.д.
открыт фрагмент Понравился
HighlightFragment highlightFragment=new HighlightFragment(FirstReaderScreen.this); //Your fragment
getSupportFragmentManager()
.beginTransaction()
.add(R.id.LL_Fragment, highlightFragment) // LL_fragment is container
.addToBackStack(null)
.commit();
и в деятельности OnBackPress
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
getSupportFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}
почему, когда я addToBackStack (нуль), У меня ошибка NullPointerException? –
Это работает отлично Для меня Можете ли вы разместить Logcat – Redman
Я пытаюсь сделать второе решение. Я добавил фрагмент A статически и создаю поверх FrameLayout для другого фрагмента. Когда я открываю новый фрагмент, я использую функцию replace(), но сталкиваюсь с проблемой: если я добавляю новые фрагменты в задний стек, onBack нажал, у меня есть все открытые ранее фрагменты, если я не добавляю в задний стек, приложение onBackpressed закрывается. –
Я думаю, мне нужно добавить в задний стек только первый фрагмент из другого (например: B, C, D и т. Д.) –
Да Добавить в обратную сторону Стек Только для первого фрагмента – Redman