2017-04-14 51 views
0

我在列表视图的行内有一个按钮。我想检测它的onClick事件并在行上的位置(哪一行被点击)。按钮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

为什么这是最终的int位置这个 –

+0

你是否将对象返回到getItem(int i)? – Sach

+0

是的,它返回一个对象 –

回答

1

感谢声明

LayoutInflater mInflater; //Global 

调用此

mInflater = LayoutInflater.from(context); //Contractor 

然后

if (convertView == null) 
convertView = mInflater.inflate(R.layout.item_cart, null); 
+0

感谢您的帮助。但是与我现在的代码有什么不同? –

+0

我需要研究什么膨胀(R.layout.item_cart,null);没有,但这样做搞砸了我的行项目布局... –

+0

@BlazeTama发生同样的问题? –

0

好,

我只需要调用notifyDataSetChanged

所以我摆脱这个代码:

holder.txtCartQty.setText(getItem(position).getQty()); 

,并呼吁notifyDataSetChanged代替

我的错误是我试图手动更新座并忘记了Android适配器的最基本原理之一

谢谢大家的帮助

+0

马虎的错误。 'notifyDataSetChanged'刷新 –