Добавить (не заменить) фрагмент с компонентом архитектуры навигации

У меня есть активность с фрагментом списка продуктов и многими другими фрагментами, и я пытаюсь использовать контроллер навигации по компонентам архитектуры.

Проблема заключается в том, что он заменяет фрагмент списка продуктов (начального назначения), и я не хочу, чтобы список был перезагружен, когда пользователь нажимает кнопку "Назад".

Как сделать транзакцию фрагмента как add, а не заменять.

Ответ 1

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

Я просто добавил проверку, если привязка присутствует, тогда я просто восстановил предыдущее состояние, то же самое с сетевым вызовом, я добавил проверку, если данные присутствуют в модели представления, тогда не выполняю повторное сетевое обновление. После тестирования все работает как положено.

  private lateinit var binding: FragmentSearchResultsBinding

  override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        viewModel =
            ViewModelProviders.of(this, mViewModelFactory).get(SearchResultsViewModel::class.java)
        return if (::binding.isInitialized) {
            binding.root
        } else {
            binding = DataBindingUtil.inflate(inflater, R.layout.fragment_search_results, container, false)

            with(binding) {
               //some stuff
                root
            }
        }
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        //reload only if search results are empty
        if (viewModel.searchResults.isEmpty()) {
           args.searchKey.let {
                binding.toolbarHome.title = it
                viewModel.onSearchResultRequest(it)
            }
        }
    }

Ответ 2

Вы получили ответ за добавление не заменяющих фрагментов навигационным контроллером?

Ответ 3

После небольшого поиска это невозможно, но сама проблема может быть решена с помощью viewmodel и aliveata или rxjava. Таким образом, состояние фрагмента сохраняется после транзакций, и мой список продуктов не будет перезагружаться каждый раз

Ответ 4

@Rainmaker прав, на мой взгляд, я сделал то же самое. Мы также можем сохранить позицию/состояние просмотра переработчика в onSaveInstanceState, чтобы вернуться к той же позиции просмотра переработчика при переходе назад к фрагменту списка.