Множественные «onChanged» исполнения на LiveData при переходе назад с отложенным переходом - PullRequest
0 голосов
/ 02 мая 2020

мое приложение имеет два основных фрагмента (FeedFragment & Profile) с BottomNavigationView и навигационным компонентом Jetpack. Из FeedFragment я могу глубже перемещаться по контенту, поэтому я решил реализовать переходы общего элемента отсюда.

Я замечаю, если я перейду от FeedFragment к ProfileFragment и обратно к FeedFragment, что обработчик onChanged-обработчика viewModels LiveData является срабатывает дважды (для разных экземпляров фрагмента), но только если я отложил транзакцию фрагмента (для перехода с общим элементом). Если я удаляю «onChanged» запускается только один раз.


Код

FeedFragment

class FeedFragment : DaggerFragment() {


    private val model: FeedViewModel by viewModels { ... }

    private val feedAdapter: FeedAdapter by lazy { ... }

    private lateinit var binding: FeedBinding;

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        super.onCreateView(inflater, container, savedInstanceState)

        binding = FeedBinding.inflate(inflater, container, false).apply {
            lifecycleOwner = viewLifecycleOwner
            viewModel = model
        }

        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        observePosts()

        setupRecyclerView(binding.recyclerView)

        // without this line the "onChange" of the posts LiveData is just triggered once
        postponeEnterTransition()
        binding.recyclerView.doOnPreDraw { startPostponedEnterTransition() }
    }

    private fun observePosts() = model.posts.observe(viewLifecycleOwner) {
        feedAdapter.submitList(it)
    }

    private fun setupRecyclerView(recyclerView: RecyclerView) = recyclerView.run {
        layoutManager = StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL)
        adapter = feedAdapter
    }
}


Я не знаю, почему это не происходит ни, ни Я не знаю, как это предотвратить.

Было бы здорово, если бы кто-нибудь мне тут помог!

Спасибо, Крис

...