Как использовать глобальное значение в RecyclerAdapter на Android - PullRequest
0 голосов
/ 09 ноября 2019

При желании используйте RecyclerView в моем приложении, и я хочу использовать некоторые данные в adapter этого RecyclerView.
Я пишу коды, но не найден мои данные в 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 !!!

Как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 09 ноября 2019

Определить userData как сопутствующий объект в CategoryAdapter

companion object {
    lateinit var userData =""
}

Инициировать его внутри CategoryAdapter

   init {
        userData = ADDRESS_LOCATION_LAT
   }

И затем получить доступ из ViewHolder

fun accessVar(){
   print(userData )
}
0 голосов
/ 09 ноября 2019

Вы должны использовать метод #onBindViewHolder.

Например, вы хотите использовать userData в вашем ViewHolder. Вы можете написать метод в вашем 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)

}
...