я столкнулся с проблемой
Я использую переходы общего элемента с фрагментами, чтобы сделать анимацию типа галереи, где вы переходите от реселлера к viewpager и возвращаетесь с анимацией на правильном изображении, соответствующем тому, где вы остановились на пейджере представления, и это работает нормально. Моя проблема заключается в том, что для этого требуется отложить входные переходы, потому что я должен сначала загрузить все изображения, когда возвращаюсь к фрагменту повторного просмотра. Это странным образом приводит к тому, что мой фрагмент находится в состоянии «не присоединен» и «удаляется» при первой загрузке, это, в свою очередь, приводит к тому, что liveata не уведомляет об изменениях и ничего не загружается, страница остается пустой.
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_user_list, container, false)
binding.setLifecycleOwner(this)
val view = binding.root
prepareTransitions()
postponeEnterTransition()
return view
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
App.applicationComponent.inject(this)
viewModel = ViewModelProviders.of(this, viewModelFactory)[UserListViewModel::class.java]
communicationViewModel = ViewModelProviders.of(requireActivity())[UserListDetailCommViewModel::class.java]
binding.viewModel = viewModel
userRefresh.setProgressViewOffset(false, 0, 80.dp)
setupRecyclerView()
setFilterClick()
subscribe()
scrollToPosition()
userRefresh.setOnRefreshListener {
viewModel.updateUsers(true)
}
}
private fun subscribe() {
viewModel.users.observe(requireActivity(), Observer {
println("reached user list fragment")
when {
it.error != null -> println(it.error)
it.result != null -> {
println("Reached fragment with result")
println("Added: $isAdded, detached: $isDetached, removing: $isRemoving")
if (isAdded && !isDetached && !isRemoving){
println("Showing users")
showUsers(it.result)
}
}
else -> {
println("Empty")
TODO("Handle")
}
}
})
viewModel.me.observe(this, Observer {
GlideApp.with(this).load(it.picture).error(R.drawable.round_placeholder).circleCrop().into(profilePicture)
})
}
Как вы можете видеть из моего кода, я пытался использовать активность в качестве владельца жизненного цикла, чтобы понять, действительно ли это была проблема жизненного цикла фрагмента, и с ним работает обратный вызов liveata, но в результате фрагмент по-прежнему отключается и удаляется.
Бит startPostponedEnterTransition()
находится в адаптере при загрузке фотографий
Может кто-нибудь помочь?