处理listview项目内的项目上的click事件

时间:2015-11-09 07:37:00

标签: android listview onclick adapter getview

我有一个自定义列表视图,其中每个项目都有两个按钮(ADD和SUB)和一个维护计数的textView。

最初计数为零,当我点击ADD按钮时,它会加1,当我点击SUB按钮时减去1。

因为对于每一行,计数应该单独维护,我找不到任何可以做同样的技术。

我尝试在我的适配器中使用View.OnClickListener,但无法检索位置。因此,每当我点击“添加”按钮时,它会为每个项目添加1。

请帮我一些有用的技巧。

4 个答案:

答案 0 :(得分:6)

首先,您必须创建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 :(得分:0)

在适配器的getView方法中,在设置点击侦听器之前,您可以通过创建使用position中的参数getView初始化的最终变量来保留当前位置。然后在点击监听器中,您可以使用它。

答案 2 :(得分: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
            }
        });

答案 3 :(得分:0)

将适配器中的单击侦听器设置为您已保存按钮引用的引用对象

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

它会触发您的列表项添加按钮,而不会打扰其他人