我有一个自定义列表视图,其中每个项目有两个按钮(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