我在listview的行中有一个按钮。我想检测它的onClick事件和行上的位置(单击哪一行)。
我当前的代码正在运行,但它在错误的行上触发。因此,例如,如果我点击第一行,则会触发最后一行。
这是我的getView:
public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {
if(convertView == null)
{
convertView = LayoutInflater.from(context)
.inflate(R.layout.item_cart, parent, false);
holder = new CartHolder(convertView);
convertView.setTag(holder);
}
else
{
holder = (CartHolder) convertView.getTag();
}
holder.btnCartAddQty.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//WRONG POSITION
getItem(position).setQty((Integer.parseInt(getItem(position).getQty())+1)+"");
holder.txtCartQty.setText(getItem(position).getQty());
}
});
我哪里做错了?
更新1
进行一些调试后,似乎检测到位置正确但setText
的目标错误
所以罪魁祸首就在这行代码中:
holder.txtCartQty.setText(getItem(position).getQty());
代码始终以holder.txtCartQty
感谢任何帮助,提前致谢
答案 0 :(得分:2)
声明
LayoutInflater mInflater; //Global
请致电
mInflater = LayoutInflater.from(context); //Contractor
然后
if (convertView == null)
convertView = mInflater.inflate(R.layout.item_cart, null);
答案 1 :(得分:0)
那么,
我只需要致电notifyDataSetChanged
所以我摆脱了这段代码:
holder.txtCartQty.setText(getItem(position).getQty());
并调用notifyDataSetChanged
而不是
我的错误是我试图手动更新持有人并忘记了Android适配器最基本的原则之一
感谢大家的帮助