Добавить (не заменить) фрагмент с компонентом архитектуры навигации - PullRequest
0 голосов
/ 09 октября 2018

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

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

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

Ответы [ 3 ]

0 голосов
/ 09 июля 2019

Я столкнулся с той же проблемой, ожидая 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)
            }
        }
    }
0 голосов
/ 24 июля 2019

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

0 голосов
/ 03 июля 2019

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

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