Как выполнить пользовательскую навигацию? - PullRequest
1 голос
/ 23 мая 2019

Я пытаюсь использовать новый компонент архитектуры под названием навигация. Это очень увлекательно и создает меньше кода, чем использование FragmentManager. Теперь я оказался в случае, когда у меня есть 5 фрагментов с навигацией, похожей на эту:

A -> B -> C -> D -> E

Иногда мне нужно переместить пользователя из фрагмента A прямо в E, и если нажата кнопка «Назад», я хочу что-то вроде этого:

E -> D -> C -> B -> A

Но то, что я получил сейчас:

E -> A

Есть ли какой-нибудь доступный способ сделать это?

Ответы [ 2 ]

1 голос
/ 23 мая 2019

OK!если вы хотите перейти с E -> A, вам нужно pop немного fragments с fragmentManager.Итак, вам нужно сделать:

var size = fragmentManager!!.backStackEntryCount
var fm: FragmentManager = fragmentManager as FragmentManager
for (i in 0..(size - 1)) {
    fm.popBackStack()
}

в вашем backPressed событии.

0 голосов
/ 23 мая 2019

Если вы сразу двигаетесь из E-> D сейчас, когда хотите вернуться назад, проверьте, присутствует ли уже фрагмент в бэкстеке, если он есть, вернитесь к этому, в противном случае откройте снова. Для этого

Вы можете использовать функции findFragmentByTag () или findFragmentById () для получения фрагмента. Если упомянутые методы возвращают ноль, то этот фрагмент не существует.

Fragment fragmentA = fragmentManager.findFragmentByTag("frag1");
if (fragmentA == null) {
    //not exist
}
else{
   //fragment exist
}

И в вашем другом сценарии, когда вы идете A-> B-> C-> D, а затем хотите добавить несколько фрагментов, тогда Yo может сделать это в java

 for (int i=0;i<fragmentManager.backStackEntryCount;i++) { // or change the many fragments you want to pop.
     fragmentManager.popBackStack();
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...