Компонент навигации: найти, находится ли фрагмент в заднем стеке - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь найти, если фрагмент уже находится в backStack моего NavHostFragment (так что он автоматически управляет транзакциями фрагментов и backstack), чтобы вернуться к нему, когда пользователь выбирает этот пункт назначения из моего бокового меню,вместо добавления другого нового фрагмента в backstack.

Вот в чем загвоздка: многие мои фрагменты относятся к одному классу, давайте назовем его ArticleListFragment, а их параметр contentId (простой идентификатор строки) изменяет то, чтоотображается в этих фрагментах.

Это означает, что я не могу использовать nav_host_fragment.childFragmentManager.findFragmentById(), поскольку несколько моих фрагментов в backstack имеют одинаковый идентификатор фрагмента.

То, что я до сих пор пробовал, так это

var foundIndex = -1
for (i in 0 until nav_host_fragment.childFragmentManager.backStackEntryCount) {
    val currFragmentTag = nav_host_fragment.childFragmentManager.getBackStackEntryAt(i).name
    val currFragmentId = nav_host_fragment.childFragmentManager.getBackStackEntryAt(i).id
    //val currFragment = nav_host_fragment.childFragmentManager.findFragmentByTag(currFragmentTag) // always returns null
    val currFragment = nav_host_fragment.childFragmentManager.findFragmentById(currFragmentId) // always returns null 

    // currentFragment is null so the check always fails       
    if (currFragment is ArticleListFragment && currFragment.contentId == "a value I need to check") {
        foundIndex = i
        break
    }
}

Я что-то не так делаю? Есть ли другой способ проверить, находится ли фрагмент, добавленный компонентом навигации Android, в заднем стеке?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...