мое приложение имеет два основных фрагмента (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
}
}
Я не знаю, почему это не происходит ни, ни Я не знаю, как это предотвратить.
Было бы здорово, если бы кто-нибудь мне тут помог!
Спасибо, Крис