android - 访问 RecyclerViewAdapter 内的生命周期范围

标签 android kotlin

我需要访问 onBindViewHolder 内的房间数据库。在 Activity 中使用时效果很好。但是我如何在 onBindViewHolder 中启动生命周期作用域?

import androidx.lifecycle.lifecycleScope

class ProjectRecyclerViewAdapter(

    private val values: ArrayList<ProjectEntity>,
    private val itemClickListener: OnProjectItemClickListener
) : RecyclerView.Adapter<ProjectRecyclerViewAdapter.ViewHolder>() {

    lateinit var context: Context

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view =
            LayoutInflater.from(parent.context).inflate(R.layout.fragment_item_project, parent, false)
        context = parent.context
        return ViewHolder(view)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {

        val item = values[position]
        holder.name.text  = item.title

        lifecycleScope.launch {
            DataBaseHelper.getRolesByIDFromDB(context, item.fsId!!)
        }


    }

}

最佳答案

嗯,正如其他人所说,在适配器中访问数据库并不是最佳实践。

最好在获得ArrayList数据后立即访问数据库。

但是如果你坚持的话,你可以使用这个代码

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val item = values[position]
        holder.name.text  = item.title

        GlobalScope.launch {
            DataBaseHelper.getRolesByIDFromDB(context, item.fsId!!)
        }
    }

关于android - 访问 RecyclerViewAdapter 内的生命周期范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63423721/

相关文章:

android - HighChart 库 Android : HIOptions not found in HIChartView

android - 应用程序安装失败,构建脚本错误

java - 内存泄漏,Android 的 Spring

java - Android打开失败: EACCES (Permission denied)

string - Kotlin String.split,当分隔符位于引号内时忽略

Android:有没有办法以编程方式打开关闭物理键盘?

java - 要求因 float 而失败

android - 无法将 ViewPager 与 androidx 一起使用

android - 如何以编程方式显示/隐藏 BottomAppBar?

kotlin - 在reduce()内部使用扩展函数引用