Hel*_*oCW 3 android android-lifecycle
目前,我用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
}
)
}
...
}
Run Code Online (Sandbox Code Playgroud)
VoiceAdapters val View.lifecycleOwner get() = ViewTreeLifecycleOwner.get(this)`
Run Code Online (Sandbox Code Playgroud)
然后访问它: parent.lifecycleOwner
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VoiceViewHolder {
if(!::lifecycleOwner.isInitialized){
lifecycleOwner = parent.context as LifecycleOwner
}
}
Run Code Online (Sandbox Code Playgroud)
它们指向相同LifecycleOwner的Context, 用于膨胀布局。
ViewTreeLifecycleOwner.get(view)是获取视图底层的便捷方式LifecycleOwner。因此,我的两分钱去选项 1 或 2。
| 归档时间: |
|
| 查看次数: |
449 次 |
| 最近记录: |