我有一個自定義列表視圖,其中每個項目有兩個按鈕(ADD & SUB)和一個textView維護計數。處理列表視圖項目內的項目單擊事件
最初計數爲零,當我點擊ADD按鈕時,它加1,當我點擊SUB按鈕時減1。
因爲對於每一行,計數應該單獨維護,我沒有找到任何技術可以讓我做到這一點。
我嘗試使用我的適配器內的View.OnClickListener,但無法檢索位置。由於這一點,每當我點擊添加按鈕時,它會爲每個項目添加1。
請幫助我一些有用的技術。
在適配器的getView
方法
我有一個自定義列表視圖,其中每個項目有兩個按鈕(ADD & SUB)和一個textView維護計數。處理列表視圖項目內的項目單擊事件
最初計數爲零,當我點擊ADD按鈕時,它加1,當我點擊SUB按鈕時減1。
因爲對於每一行,計數應該單獨維護,我沒有找到任何技術可以讓我做到這一點。
我嘗試使用我的適配器內的View.OnClickListener,但無法檢索位置。由於這一點,每當我點擊添加按鈕時,它會爲每個項目添加1。
請幫助我一些有用的技術。
在適配器的getView
方法
,只是設置點擊監聽器之前,你可以保留通過創建從getView
與參數position
初始化的最後一個變量的當前位置。然後在點擊監聽器中,您可以使用它。
我在getView中使用了單擊監聽器,並調用了另一個函數,'position'作爲參數傳遞。但問題是我如何使用持有者對象的位置來增加特定行的計數。我沒有發現任何使用持有者對象的getView外部位置的函數。 – som
然後通過持有人到您的功能Oo –
首先你必須維護一個數組,它應該根據你的加法和減法進行更新。現在,你可以把你添加和子按鈕的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
}
});
集點擊監聽器,你的適配器,你必須保存按鈕參考
listHolder.buttonAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Do the adding task here
}
});
它的參考對象將觸發您的列表項添加按鈕,而不會打擾其他人
首先,您必須製作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;
}
}
你的代碼在哪裏? – Pavan