1

Мне нужно создать навигация фрагментов, как в приложении Gmail. Это похоже на: у нас есть один основной фрагмент A, мы можем открыть другой фрагмент (B, C, D ...) из навигационного ящика, а когда мы открываем новый фрагмент, он открыт поверх основного фрагмента и при нажатии , во всех случаях мы возвращаемся к основному фрагменту A, не зависим от количества новых открытых фрагментов. Кажется, первый основной фрагмент A мы используем метод add (int FragmentTransaction) без добавления фрагмента backStack. Затем, следующий фрагмент B, мы также используем метод add, добавив в задний стек. И когда мне нужно открыть еще один (фрагмент C), мне нужно заменить второй фрагмент B. Но когда я использую метод replace(), заменяю все контейнер, а основной фрагмент A не отображается, когда обратная кнопка нажата из фрагмента C или B и приложение близко. Итак, возникает вопрос: как заменить только фрагмент B или C без потери фрагмента A?Фрагменты навигации

ответ

1

правильное решение будет иметь два контейнера framelayouts в вашей деятельности. Первый (который будет ниже другого) содержит фрагмент A. Все, что вы открываете, будет добавлено/заменено во втором контейнере.

Другим решением является включение фрагмента А статически в макете, и ваш контейнер framelayout поверх него, где вы добавляете свои фрагменты B, C, D и т.д.

+0

Я пытаюсь сделать второе решение. Я добавил фрагмент A статически и создаю поверх FrameLayout для другого фрагмента. Когда я открываю новый фрагмент, я использую функцию replace(), но сталкиваюсь с проблемой: если я добавляю новые фрагменты в задний стек, onBack нажал, у меня есть все открытые ранее фрагменты, если я не добавляю в задний стек, приложение onBackpressed закрывается. –

+1

Я думаю, мне нужно добавить в задний стек только первый фрагмент из другого (например: B, C, D и т. Д.) –

+0

Да Добавить в обратную сторону Стек Только для первого фрагмента – Redman

1

открыт фрагмент Понравился

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(); 
    } 
} 
+0

почему, когда я addToBackStack (нуль), У меня ошибка NullPointerException? –

+0

Это работает отлично Для меня Можете ли вы разместить Logcat – Redman

 Смежные вопросы

  • Нет связанных вопросов^_^