如何在RecyclerView.Adapter中获取LifecycleOwner引用?
目前,我用mLifecycleOwner = mContext as LifecycleOwnerget LifecycleOwner,它可以工作,但我认为它不是一个好的代码。
我怎样才能LifecycleOwner从ListAdapter?
class VoiceAdapters (private val aHomeViewModel: HomeViewModel, private val mPlay: PlayInterface):
ListAdapter<MVoice, VoiceAdapters.VoiceViewHolder>(MVoiceDiffCallback()) {
private lateinit var mContext: Context
private lateinit var mLifecycleOwner:LifecycleOwner
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VoiceViewHolder {
mContext = parent.context
mLifecycleOwner = mContext as LifecycleOwner
return VoiceViewHolder(
LayoutVoiceItemBinding.inflate(LayoutInflater.from(parent.context), parent, false).also {
it.lifecycleOwner = mLifecycleOwner
it.aHomeViewModel = aHomeViewModel
}
)
}
...
}
回答
- 将其作为构造函数参数传递给
VoiceAdapters - 创建扩展属性:
val View.lifecycleOwner get() = ViewTreeLifecycleOwner.get(this)`
然后访问它: parent.lifecycleOwner
- 只解决一次:
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VoiceViewHolder {
if(!::lifecycleOwner.isInitialized){
lifecycleOwner = parent.context as LifecycleOwner
}
}
它们指向相同LifecycleOwner的Context, 用于膨胀布局。
ViewTreeLifecycleOwner.get(view)是获取视图底层的便捷方式LifecycleOwner。因此,我的两分钱去选项 1 或 2。
THE END
二维码