2017-04-14 47 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'刷新 –