单击位置时的Android列表视图

单击位置时的Android列表视图,android,Android,我有一个通过列表视图添加行的视图。列表项具有以下内容: 复选框-复选框, 项目名称-文本视图, 减号按钮-图像按钮, 数量-文本视图, 添加按钮。-图像按钮 我需要更新数量的基础上增加或减少点击。我可以通过getTag()获取添加按钮的位置,但无法获取相应的数量来更新它。下面是适配器类 public class CustomAdapter extends BaseAdapter { private List<String> mListItems; private L

我有一个通过列表视图添加行的视图。列表项具有以下内容: 复选框-复选框, 项目名称-文本视图, 减号按钮-图像按钮, 数量-文本视图, 添加按钮。-图像按钮

我需要更新数量的基础上增加或减少点击。我可以通过getTag()获取添加按钮的位置,但无法获取相应的数量来更新它。下面是适配器类

public class CustomAdapter extends BaseAdapter {

    private List<String> mListItems;
    private LayoutInflater mLayoutInflater;
    private Context mContext;
    ItemDBAdapter itemDB;
    ViewHolder holder;
    int a =1;
    public CustomAdapter(Context context,ArrayList<String> arrayList){

        mContext=context;
        mListItems=arrayList;
        mContext=context;
        //get the layout inflater
        mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return mListItems.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return 0;
    }


      private static class ViewHolder {

             TextView itemName,quantity;
                CheckBox checkbox;
                ImageButton addBtn,minusBtn;



        }
      @Override

        public View getView(int position, View convertview, ViewGroup viewGroup) {

            // create a ViewHolder reference


            //check to see if the reused view is null or not, if is not null then reuse it
            if (convertview == null) {
                holder = new ViewHolder();


                convertview = mLayoutInflater.inflate(R.layout.list_item, null);



               /* holder.itemName=new TextView(mContext);
                holder.checkbox=new CheckBox(mContext);
                holder.quantity=new TextView(mContext);
                holder.addBtn=new ImageButton(mContext);
                holder.minusBtn=new ImageButton(mContext)*/;

                holder.itemName = (TextView) convertview.findViewById(R.id.item_name);
                holder.addBtn = (ImageButton) convertview.findViewById(R.id.add);
                holder.minusBtn = (ImageButton) convertview.findViewById(R.id.minus);
                holder.quantity = (TextView) convertview.findViewById(R.id.item_quantity);
                holder.checkbox = (CheckBox) convertview.findViewById(R.id.cbBox);
                holder.checkbox.setOnCheckedChangeListener(checkListener);
                holder.checkbox.setTag(position);
                holder.minusBtn.setImageResource(R.drawable.minus);
                holder.quantity.setText(String.valueOf(a));
                holder.quantity.setTag(position);
                holder.addBtn.setImageResource(R.drawable.add);
                holder.addBtn.setOnClickListener(addBtnClick);
                holder.addBtn.setTag(position);
                //holder.minusBtn.setOnClickListener(minusBtnClick);
                holder.minusBtn.setTag(position);

                // the setTag is used to store the data within this view
                convertview.setTag(holder);
            } else {
                // the getTag returns the viewHolder object set as a tag to the view
                holder = (ViewHolder)convertview.getTag();
            }

            //get the string item from the position "position" from array list to put it on the TextView
            String stringItem = mListItems.get(position);

            if (stringItem != null) {
                if (holder.itemName != null) {
                    //set the item name on the TextView
                    holder.itemName.setText(stringItem);
                }
      }

            //this method must return the view corresponding to the data at the specified position.
            return convertview;

        }


         private OnClickListener addBtnClick = new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stube
                int b = (Integer) v.getTag();
                a = a + 1;
                holder.quantity.setText(String.valueOf(a));

            }
        };



}
公共类CustomAdapter扩展了BaseAdapter{
私人名单机构;
私人停车场平面布置;
私有上下文;
itemdadapter itemDB;
视窗座;
INTA=1;
公共CustomAdapter(上下文上下文,ArrayList ArrayList){
mContext=上下文;
mListItems=阵列列表;
mContext=上下文;
//找到布局充气机
mLayoutInflater=(LayoutInflater)context.getSystemService(context.LAYOUT\u INFLATER\u SERVICE);
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回mListItems.size();
}
@凌驾
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回null;
}
@凌驾
公共长getItemId(int arg0){
//TODO自动生成的方法存根
返回0;
}
私有静态类视图持有者{
TextView项目名称、数量;
复选框;
图像按钮添加BTN,最小BTN;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组视图组){
//创建ViewHolder引用
//检查重用的视图是否为null,如果不为null,则重用它
if(convertview==null){
holder=新的ViewHolder();
convertview=MLAYOUTINGER.充气(R.layout.list_项,空);
/*holder.itemName=新文本视图(mContext);
holder.checkbox=新复选框(mContext);
holder.quantity=新文本视图(mContext);
holder.addBtn=新图像按钮(mContext);
holder.minusBtn=新图像按钮(mContext)*/;
holder.itemName=(TextView)convertview.findViewById(R.id.item_name);
holder.addBtn=(ImageButton)convertview.findViewById(R.id.add);
holder.minusBtn=(图像按钮)convertview.findViewById(R.id.减号);
holder.quantity=(TextView)convertview.findViewById(R.id.item\u数量);
holder.checkbox=(checkbox)convertview.findViewById(R.id.cbBox);
holder.checkbox.setOnCheckedChangeListener(checkListener);
holder.checkbox.setTag(位置);
holder.minusBtn.setImageResource(R.drawable.减号);
holder.quantity.setText(字符串.valueOf(a));
支架.数量.设置标签(位置);
holder.addBtn.setImageResource(R.drawable.add);
holder.addBtn.setOnClickListener(addBtnClick);
支架.添加BTN.设置标签(位置);
//holder.minusBtn.setOnClickListener(minusBtnClick);
固定器.最小BTN.设置标签(位置);
//setTag用于在此视图中存储数据
convertview.setTag(支架);
}否则{
//getTag将viewHolder对象集作为标记返回给视图
holder=(ViewHolder)convertview.getTag();
}
//从数组列表中的位置“position”获取字符串项,将其放在TextView中
String stringItem=mListItems.get(位置);
如果(stringItem!=null){
if(holder.itemName!=null){
//在TextView上设置项目名称
holder.itemName.setText(stringItem);
}
}
//此方法必须返回与指定位置的数据对应的视图。
返回视图;
}
private OnClickListener addBtnClick=new OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
int b=(整数)v.getTag();
a=a+1;
holder.quantity.setText(字符串.valueOf(a));
}
};
}
由于数量不可点击,我无法获取更新数量的特定位置。请告知。谢谢。

在if(convertView==null)块中,只需获取视图的引用并将其设置为标签,在其他部分获取上一个标签。在其他事情之后应用所有其他事情

像这样更改您的代码

  public View getView(int position, View convertview, ViewGroup viewGroup) {

        // create a ViewHolder reference


        //check to see if the reused view is null or not, if is not null then reuse it
        if (convertview == null) {
            holder = new ViewHolder();


            convertview = mLayoutInflater.inflate(R.layout.list_item, null);

            holder.itemName = (TextView) convertview.findViewById(R.id.item_name);
            holder.addBtn = (ImageButton) convertview.findViewById(R.id.add);
            holder.minusBtn = (ImageButton) convertview.findViewById(R.id.minus);
            holder.quantity = (TextView) convertview.findViewById(R.id.item_quantity);
            holder.checkbox = (CheckBox) convertview.findViewById(R.id.cbBox);



            // the setTag is used to store the data within this view
            convertview.setTag(holder);
        } else {
            // the getTag returns the viewHolder object set as a tag to the view
            holder = (ViewHolder)convertview.getTag();
        }

         holder.checkbox.setOnCheckedChangeListener(checkListener);
                            holder.minusBtn.setImageResource(R.drawable.minus);
            holder.quantity.setText(String.valueOf(a));

            holder.addBtn.setImageResource(R.drawable.add);
            holder.addBtn.setOnClickListener(addBtnClick);
                        //get the string item from the position "position" from array list to put it on the TextView
        String stringItem = mListItems.get(position);

        if (stringItem != null) {
            if (holder.itemName != null) {
                //set the item name on the TextView
                holder.itemName.setText(stringItem);
            }
  }

        //this method must return the view corresponding to the data at the specified position.
        return convertview;

    }
在if(convertView==null)块中,只需获取视图的引用并将其设置为标记,在else部分获取上一个标记。在其他事情之后应用所有其他事情

像这样更改您的代码

  public View getView(int position, View convertview, ViewGroup viewGroup) {

        // create a ViewHolder reference


        //check to see if the reused view is null or not, if is not null then reuse it
        if (convertview == null) {
            holder = new ViewHolder();


            convertview = mLayoutInflater.inflate(R.layout.list_item, null);

            holder.itemName = (TextView) convertview.findViewById(R.id.item_name);
            holder.addBtn = (ImageButton) convertview.findViewById(R.id.add);
            holder.minusBtn = (ImageButton) convertview.findViewById(R.id.minus);
            holder.quantity = (TextView) convertview.findViewById(R.id.item_quantity);
            holder.checkbox = (CheckBox) convertview.findViewById(R.id.cbBox);



            // the setTag is used to store the data within this view
            convertview.setTag(holder);
        } else {
            // the getTag returns the viewHolder object set as a tag to the view
            holder = (ViewHolder)convertview.getTag();
        }

         holder.checkbox.setOnCheckedChangeListener(checkListener);
                            holder.minusBtn.setImageResource(R.drawable.minus);
            holder.quantity.setText(String.valueOf(a));

            holder.addBtn.setImageResource(R.drawable.add);
            holder.addBtn.setOnClickListener(addBtnClick);
                        //get the string item from the position "position" from array list to put it on the TextView
        String stringItem = mListItems.get(position);

        if (stringItem != null) {
            if (holder.itemName != null) {
                //set the item name on the TextView
                holder.itemName.setText(stringItem);
            }
  }

        //this method must return the view corresponding to the data at the specified position.
        return convertview;

    }
试试下面的方法

onClick中

private OnClickListener addBtnClick = new OnClickListener() {

        @Override
        public void onClick(View v) {
            View view = (View) v.getParent();
            TextView tv = (TextView) view.findViewById(R.id.item_quantity);
            int value = Integer.parseInt(tv.getText().toString());
            value=value+1; 
            tv.setText(String.valueOf(value));
        }
    };
编辑:最好使用ViewHolder来平滑滚动和提高性能

试试下面的方法

onClick中

private OnClickListener addBtnClick = new OnClickListener() {

        @Override
        public void onClick(View v) {
            View view = (View) v.getParent();
            TextView tv = (TextView) view.findViewById(R.id.item_quantity);
            int value = Integer.parseInt(tv.getText().toString());
            value=value+1; 
            tv.setText(String.valueOf(value));
        }
    };
编辑:最好使用ViewHolder来平滑滚动和提高性能


holder.quantity.setText(String.valueof(a))
a是一个整数。为什么不能单击数量?感谢您的输入Raghunandan。我只使用上面的设置文本(发布时出现打字错误)。它不起作用。我可以获得单击的添加按钮的正确位置,但数量未被更新。如果数量为1,则单击需要将其设置为2的行中的按钮?是..同样,单击减号时,数量应减小
holder.quantity.setText(String.valueof(a))
a是一个整数。为什么不能单击数量?感谢您的输入Raghunandan。我只使用上面的设置文本(发布时出现打字错误)。它不起作用。我可以点击添加按钮的正确位置,但数量未更新。如果数量为1,则您可以