Android 如何在 RecyclerAdapter 中使用全局值

How to use global value in RecyclerAdapter on Android

我想在我的应用程序中使用 RecyclerView,我想在这个 RecyclerViewadapter 中使用一些数据。
我编写代码,但 未找到 我的数据到 ViewHolder ,我无法将此数据访问到 ViewHolder!

我的适配器代码:

class CategoryAdapter(private val catsModel: MutableList<HomeCatsListResponse.Data.Result>) :
    RecyclerView.Adapter<CategoryAdapter.ViewHolder>() {

    private var userData = ADDRESS_LOCATION_LAT

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

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val type = catsModel[position]
        holder.bindData(type)
    }

    override fun getItemCount(): Int {
        return catsModel.size
    }

    fun setData(catsList: MutableList<HomeCatsListResponse.Data.Result>) {
        catsModel.addAll(catsList)
        notifyDataSetChanged()
    }

    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        private val txtName = itemView.findViewById<TextView>(R.id.tv_item)

        fun bindData(type: HomeCatsListResponse.Data.Result) {
            txtName.text = type.name
        }
    }
}

我无法使用 userData 进入 ViewHolder !!!

我该如何修复它?

你应该使用 #onBindViewHolder 方法。

例如,您想在 ViewHolder 中使用 userData。您可以在 ViewHolder 中编写一个采用 userData 参数的方法。

假设您可以像这样使用 bindData 方法。

class ViewHolder(itemView: View) : 
     RecyclerView.ViewHolder(itemView) {
    private val txtName = itemView.findViewById<TextView>(R.id.tv_item)

    fun bindData(userDate: UserData, type: 
        HomeCatsListResponse.Data.Result) {

        //Use useData here

        txtName.text = type.name
    }
}


override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    val type = catsModel[position]
    holder.bindData(userData, type)

}

将 userData 定义为 CategoryAdapter 中的伴随对象

companion object {
    lateinit var userData =""
}

在 CategoryAdapter 中初始化它

   init {
        userData = ADDRESS_LOCATION_LAT
   }

然后从ViewHolder中访问

fun accessVar(){
   print(userData )
}