Нижний NavigationView Внутренний фрагмент с ChildFragmentManager Создает представление перекрытия - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь показать навигацию материала снизу внутри фрагмента. Мой навигационный вид снизу содержит три фрагмента. Я решаю проблему, когда фрагмент создает новый экземпляр каждый раз, когда мы выбираем элемент навигации. Но настоящая проблема возникает, когда я перехожу к другому фрагменту из своего Навигационного окна. Вот как выглядит моя структура нижней навигации.

Основной фрагмент (все следующие элементы являются нижними элементами навигации внутри основного фрагмента)

  1. Домашний фрагмент
  2. Уведомление Фрагмент
  3. Фрагмент поиска

    Вот как я добавляю, показываю и удаляю фрагмент с помощью Fragment Manager. Это функция расширения.

fun FragmentManager.hideAndShowFragment(
    newFragment: Fragment, containerId: Int, hideFragmentInstance: Fragment? = null
) {
    beginTransaction().apply {
        if (hideFragmentInstance == null) {
            add(containerId, newFragment)
            commit()
            return
        }

        if (fragments.contains(hideFragmentInstance))
            hide(hideFragmentInstance)
        if (fragments.contains(newFragment))
            show(newFragment)
        else add(containerId, newFragment)
        commit()
    }
}

В приведенном выше коде первое условие для случая, когда фрагмент не отображается и не нужно скрывать предыдущий фрагмент. И затем, если FragmentManager List<Fragment> содержит предыдущий фрагмент, сначала скрыть, а затем показать новый фрагмент соответственно.

И вот как я вызываю эту функцию расширения.

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?) : View {
      /////  other stuff
      bottomNav.setOnNavigationItemSelectedListener { menuItem ->
             val previousFragment = getCurrentShowingFragment(currentId)
             val newFragment = getNewFragment(menuItem.itemId)
             childFragmentManager.hideAndShowFragment(newFragment, CONTAINER_ID, previousFragment)
             currentId = menuItem.itemId
      }

      // First time 
      childFragmentManager.hideAndShowFragment(getNewFragment(currentId), CONTAINER_ID, null)
}

Теперь, когда я пытаюсь перейти к другому фрагменту с помощью Navigation Drawer и вернулся, нажав кнопку «назад», текущий показ фрагмента с отображением прилипает к экрану, даже если я пытаюсь нажать на другие элементы навигации внизу, он просто никогда не исчезает.

Вот видео демонстрация .

Спасибо за ваше время.

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