#android #android-fragments #android-navigation
Вопрос:
У меня есть фрагменты S1, S2, P, D1 и D2.
Как S1, так и S2 имеют действие, приводящее к P. Когда я нахожусь во фрагменте P, я могу перейти к D1 или D2.
Когда я пришел из S1, я хочу перейти к D1, но когда я пришел из S2, я хочу перейти к D2.
Каков наилучший способ навигации на основе исходного фрагмента?.
Я знаю, что могу использовать аргументы для этого, но это кажется гораздо более простой операцией. Я ожидал бы более ясного и быстрого решения (например, какого-то метода getNameOfSource()
).
Комментарии:
1. Вы можете найти в своем бэкстэке предыдущий фрагмент и на основании этого судить, куда идти дальше. Хотя использование аргументов гораздо удобнее, чем я бы сказал, но это выходит за рамки вопроса.
Ответ №1:
Вы можете сделать это, получив запись из своего хранилища фрагментов, хотя вам нужно убедиться, что вы предоставляете им какую TAG
-то информацию в первую очередь. Тогда вы можете просто использовать что-то подобное. Я бы сказал, что использование аргументов все же лучше, но это выходит за рамки данного вопроса
private fun getNameOfSource(): String? {
val fm = supportFragmentManager
val count = fm.backStackEntryCount
return fm.getBackStackEntryAt(count - 2).name
}
Ответ №2:
Вы можете получить тег фрагмента, используя этот код:
public Fragment getSourceFragmentName() {
// you need to check this because you need at least 2 fragments at the backstack
if (getSupportFragmentManager().getBackStackEntryCount() < 2) {
return null;
}
String fragmentTag = getSupportFragmentManager().getBackStackEntryAt(getSupportFragmentManager().getBackStackEntryCount() - 2).getName();
return getSupportFragmentManager().findFragmentByTag(fragmentTag);
}