如何在RecyclerView.Adapter中获取LifecycleOwner引用?

目前,我用mLifecycleOwner = mContext as LifecycleOwnerget LifecycleOwner,它可以工作,但我认为它不是一个好的代码。

我怎样才能LifecycleOwnerListAdapter

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
            }
        )
    }

    ...
}

回答

  1. 将其作为构造函数参数传递给 VoiceAdapters
  2. 创建扩展属性:
   val View.lifecycleOwner get() = ViewTreeLifecycleOwner.get(this)`

然后访问它: parent.lifecycleOwner

  1. 只解决一次:

 override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VoiceViewHolder {
       if(!::lifecycleOwner.isInitialized){
        lifecycleOwner = parent.context as LifecycleOwner
      }
}

它们指向相同LifecycleOwnerContext, 用于膨胀布局。

ViewTreeLifecycleOwner.get(view)是获取视图底层的便捷方式LifecycleOwner。因此,我的两分钱去选项 1 或 2。


以上是如何在RecyclerView.Adapter中获取LifecycleOwner引用?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>