我遇到了问题 我正在使用带有片段的共享元素过渡来创建画廊类型的动画,在该动画中,您从recyclerview转到viewpager,然后将动画与正确的图片一起返回,该图片与您在view pager上停止的位置相对应,并且可以正常工作。我的问题是,这样做需要推迟输入转换,因为返回到recyclerview片段时,我必须先加载所有图像。奇怪的是,这使我的片段在第一次加载时处于“未连接”和“正在删除”状态,这又导致livedata无法通知更改且没有加载,页面仍然空白。
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)
})
}
从我的代码中可以看到,我尝试使用活动作为生命周期所有者,以了解它是否确实是片段生命周期问题,并使用livedata回调起作用,但片段仍会分离并删除。
加载照片后,startPostponedEnterTransition()
位在适配器中
有人可以帮忙吗?