1

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

我需要根据添加或减去点击来更新数量。我可以通过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));

            }
        };



}

由于数量不可点击,我无法获得更新数量的特定位置。请指教。谢谢。

4

2 回答 2

1

试试下面

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 来实现平滑滚动和性能

http://developer.android.com/training/improving-layouts/smooth-scrolling.html

于 2013-08-18T11:54:52.180 回答
0

在 if(convertView==null) 块中,只需获取视图的引用和 setTag 即可,在 else 部分中获取上一个标签。在 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;

    }
于 2013-08-18T11:51:04.757 回答