2015-11-09 123 views
-1

我有一個自定義列表視圖,其中每個項目有兩個按鈕(ADD & SUB)和一個textView維護計數。處理列表視圖項目內的項目單擊事件

最初計數爲零,當我點擊ADD按鈕時,它加1,當我點擊SUB按鈕時減1。

因爲對於每一行,計數應該單獨維護,我沒有找到任何技術可以讓我做到這一點。

我嘗試使用我的適配器內的View.OnClickListener,但無法檢索位置。由於這一點,每當我點擊添加按鈕時,它會爲每個項目添加1。

請幫助我一些有用的技術。

在適配器的 getView方法
+2

你的代碼在哪裏? – Pavan

回答

0

,只是設置點擊監聽器之前,你可以保留通過創建從getView與參數position初始化的最後一個變量的當前位置。然後在點擊監聽器中,您可以使用它。

+0

我在getView中使用了單擊監聽器,並調用了另一個函數,'position'作爲參數傳遞。但問題是我如何使用持有者對象的位置來增加特定行的計數。我沒有發現任何使用持有者對象的getView外部位置的函數。 – som

+0

然後通過持有人到您的功能Oo –

0

首先你必須維護一個數組,它應該根據你的加法和減法進行更新。現在,你可以把你添加和子按鈕的onClick監聽器在這樣的適配器,

holder.plus.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       String a = holder.quantity.getText().toString(); 
       Integer qua = Integer.parseInt(a) + 1; 
       String q = qua.toString(); 
       holder.quantity.setText(q); 
       //update in database. 
       // In above comment you update the database. Now at this place you need to set the "q" to your list which you passed to adapter 
       yourList.get(position).setQuantity(q); // here you can set the updated value to your list which automatically reflect to your listview 
      } 
     }); 
0

集點擊監聽器,你的適配器,你必須保存按鈕參考

listHolder.buttonAdd.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     // Do the adding task here 
    } 
}); 

它的參考對象將觸發您的列表項添加按鈕,而不會打擾其他人

5

首先,您必須製作ViewHolder類,它包含您的listview項目的所有TextView和Button。之後,讓對象ViewHolder和持有者對象在getView中初始化所有值,如TextView和Button。通過使用這些技術值不在所有行中重複。

public class CustomAdapter extends ArrayAdapter<String>{ 
LayoutInflater vi; 
LinearLayout l; 
Activity c; 
String i[]; 
ArrayList<Integer> n; 
ViewHolder holder; 


public CustomAdapter(Activity context, String[] i) { 
    super(context,R.layout.list_item, i); 
    // TODO Auto-generated constructor stub 
    this.c = context; 
    this.i = i; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    ViewHolder holder; 
    if (convertView == null) { 
     LayoutInflater layoutInflater = c.getLayoutInflater(); 
     convertView = layoutInflater.inflate(R.layout.list_item, null); 
     holder = new ViewHolder(); 
     holder.imageview = (ImageView) convertView.findViewById(R.id.img); 
     holder.btnAdd = (Button) convertView.findViewById(R.id.inc); 
     holder.txt = (TextView) convertView.findViewById(R.id.txt); 
     holder.l = (LinearLayout) convertView.findViewById(R.id.linear); 

     holder.btnAdd.setTag(holder); 
     convertView.setTag(holder); 

     holder.btnAdd.setOnClickListener(new View.OnClickListener() { 
      int count=0; 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       View p = (View) v.getParent(); 
       ViewHolder holder1 = (ViewHolder) v.getTag(); 
       count = Integer.valueOf(holder1.txt.getText().toString()); 
       count++; 
       holder1.txt.setText(String.valueOf(count)); 



      } 
     }); 

    } 

      return convertView; 
} 

static class ViewHolder { 
    public ImageView imageview; 
    public Button btnAdd; 
    public TextView txt; 
    public LinearLayout l; 
} 
} 
+1

這是正確的方法。 setTag()效果很好 – Jas

+0

使用這種方式,它會將其他列表項的最後設置值。因爲getView只會調用一次,直到您滾動視圖。一旦你滾動你的視圖,getView再次調用,計數器從零開始,而對於已經可見的其他項目,點擊添加按鈕它會從其他項目獲取最後更新的值。 – som

+0

你好索姆,我已經更新了我的答案。 –