android-如何正确设置适配器中的clicklistener

wnavrhmk  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(305)

我的适配器中有以下逻辑:

val listItem = modelCart[position]

    var number = 0
        holder.btnAdd.setOnClickListener {
            val textNumber = number++
            listItem.amount = textNumber.toString()
            holder.amount.text = listItem.amount
        }

我的目的是当对每个项目调用clicklistener(btnadd)时,该位置的数量增加一个。
在上面的逻辑中没有问题,调用clicklistner时每个项目的数量增加一个。
但是我认为最好不要直接向适配器声明逻辑。我正在使用一个接口在相应的片段中声明上面的逻辑。
所以我在适配器中声明了一个接口:
clicklistner界面

interface ClickListener {
    fun onClick(modelCart: ModelCart , textView: TextView)
}

在我的构造函数适配器中声明一个示例:

class MarketAdapter(
    private val modelCart: List<ModelCart> , private val clickListener: ClickListener
)

下面的代码可以更好地看到我的适配器:

class ViewHolder(itemview: View) : RecyclerView.ViewHolder(itemview)

        val amount = itemview.amount_market
        val btnAdd = itemview.add_market

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

 val listItem = modelCart[position]

// where the clickListner called .
 holder.btnAdd.setOnClickListener {
            clickListener.onClick(listItem , holder.amount)
        }

在我的片段中我得到了接口:

val list = ArrayList<ModelCart>()
        for (i in 0..50) {
            list.add(ModelCart(amount = "0", title ="pizza",price = "10$",image = R.drawable.pizza))
        }
        model = list
        recyclerView = view.findViewById(R.id.recyclerView_Market)

        recyclerView.layoutManager =
            LinearLayoutManager(view.context, LinearLayoutManager.VERTICAL, false)

        recyclerView.adapter =

            MarketAdapter(model, object : ClickListener{
                var number = 0
                override fun onClick(modelCart: ModelCart , textView: TextView) {
                    modelCart.amount = number++.toString()
                    textView.text = modelCart.amount
                }
            })

这个逻辑不好用!!!我不知道这里到底发生了什么。
这必须是这样的:每次调用clicklistner时,每个位置的数量都应该增加。但这不是真的!!!第二个逻辑怎么了?我怎样才能解决这个问题?
如果有人能帮我,我会非常感激的。

2q5ifsrm

2q5ifsrm1#

你为什么不把你的听众传给你的听众?

class MarketAdapter(
    private val modelCart: List<ModelCart> ,val clickListener: (ModelCart, TextView) -> Unit
    ){
     override fun onBindViewHolder(holder: ViewHolder, position: Int ) {
            holder.bind(modelCart[position], clickListener)
        }
}

在您的viewholder中:

class ViewHolder(itemview: View) : RecyclerView.ViewHolder(itemview)
fun bind(modelCart: ModelCart?, clickListener: (ModelCart, TextView) -> Unit)){
   holder.btnAdd.setOnClickListener {clickListener(modelCart, holder.)}
}

碎片/活动

fun increaseValue(modelCart : ModelCart, view : TextView){
val textNumber = modelCart.amount.toInt()
textNumber++ 
modelCart.amount = textNumber.toString()
view.text = modelCart.amount

}

对于初始化:

MarketAdapter(model,  { modelCart: ModelCart, view:TextView -> increaseValue(modelCart, view) }
            })

我认为你的代码很好,但我不理解你的回调/接口clicklistener。我写得很快,可能有语法错误

相关问题