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

som*_*som -1 android listview onclick adapter getview

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

最初计数为零,当我单击"添加"按钮时,它会添加1并在我单击"SUB"按钮时减去1.

因为对于每一行,计数应该单独维护,我没有找到任何技术,我可以通过它来做同样的事情.

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

请帮我一些有用的技巧.

Nav*_*tar 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;
 }
}
Run Code Online (Sandbox Code Playgroud)