[英]How can I get LifecycleOwner reference in RecyclerView.Adapter?
目前,我使用mLifecycleOwner = mContext as LifecycleOwner
來獲取LifecycleOwner
,它可以工作,但我認為它不是一個好的代碼。
如何從ListAdapter
獲取LifecycleOwner
?
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
的便捷方式。 因此,我的兩分錢 go 選擇 1 或 2。
如果您通過構造函數在適配器中傳遞context
,則可以使用.
操作員。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.