Access lifecycleScope inside RecyclerViewAdapter

Viewed 1191

I need to acess my room DB inside onBindViewHolder. It worsk great when using in Activity. But how I launch lifecycleScope inside 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!!)
        }


    }

}
1 Answers

Well, as what the others said, it is not a best practice to access DB in adapter.

It is better to access DB right after you got the the ArrayList data.

But if you insist, you can use this code

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

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