Есть ли лучший способ навигации в Android на основе исходного фрагмента?

#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);
}