Я пытаюсь найти, если фрагмент уже находится в 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, в заднем стеке?