2

Мое приложение содержит всего лишь одно деяние и большое количество фрагментов.Совокупность фрагментов для одной активности Многие приложения для фрагментов

В XML-файле моей активности у меня есть только FrameLayout, на котором я заменяю/добавляю/скрываю/показываю различные фрагменты.

Imagine Fragment A - это первый фрагмент, который пользователь видит при открытии приложения.

Нажмите что-нибудь в Fragment A, чтобы запустить Fragment B и нажмите что-нибудь в Fragment B, чтобы запустить Fragment C.

Так навигация может быть проиллюстрирована следующим образом:

Фрагмент A -> Фрагмент B -> C Фрагмент

Я хочу, чтобы запустить приложение и показать Fragment C непосредственно из уведомления.

Однако, как я могу обеспечить назад навигацию от Fragment C, так как такой щелчок назад переместился бы на Fragment B и снова щелкнул бы обратно в Fragment A?

i.e Как я могу ввести следующую структуру стека?

фрагмента А < - Фрагмент B < - Фрагмент C

ответ

1

Что вы можете сделать, это - Используйте уведомление, в котором намерение передать строку. В вашей основной деятельности, если вы получите эту строку, сделайте фрагментный стек A, B и C. Иначе, если вы не получите намерения, просто продолжайте свой поток, как есть.

+0

«сделайте фрагмент из A, B и C», это мой вопрос, как мне это сделать? Существуют способы создания стека действий, чтобы поддерживать навигационную целостность при запуске приложения из уведомления. – rgv

+0

То, что я имел в виду, это использовать фрагментTransaction.addToBackStack (str), когда вы получаете let say-getIntent(). HasExtra (Constant.FROM_NOTIFICATION), иначе вы идете вперед, как есть. –

+0

метод add to back stack- final FragmentTransaction ft = getSupportFragmentManager(). BeginTransaction(); ft.replace (R.id.frame_content, fragmentB); ft.addToBackStack ("fragB"); ft.commit(); а затем для фрагмента c –

1

Да, вы можете это сделать. Начиная с библиотеки поддержки v26 вы можете построить стек с фрагментами без значительных затрат. В вашей деятельности сделать следующее:

getSupportFragmentManager().beginTransaction() 
      .replace(R.id.container, new FragmentA()) 
      .addToBackStack("fragmentA") 
      .setReorderingAllowed(true) 
      .commit(); 

    getSupportFragmentManager().beginTransaction() 
      .replace(R.id.container, new FragmentB()) 
      .addToBackStack("fragmentB") 
      .setReorderingAllowed(true) 
      .commit(); 

    getSupportFragmentManager().beginTransaction() 
      .replace(R.id.container, new FragmentC()) 
      .addToBackStack("fragmentC") 
      .setReorderingAllowed(true) 
      .commit(); 

Имейте в виду, что Fragmenta и FragmentB будет вести себя немного по-другому, как после нажатия кнопки назад на FragmentC из-за setReorderingAllowed. onCreateView не будет вызываться для FragmentA и FragmentB после того, как они были добавлены в стек, только в FragmentC onCreateView будет вызван. Для FragmentA и FragmentB будет вызываться только onCreate.

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

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