点击位置的Android列表视图

时间:2013-08-18 11:31:30

标签: android

我有一个视图,通过列表视图添加行。列表项水平跟随: 复选框-Checkbox, 物品名称 - textView, 减号按钮 - 图像按钮, 数量 - textview, 添加按钮。 - 图像按钮

我需要根据加减点击更新数量。我可以通过getTag()获取添加按钮位置,但无法获得相应的数量来更新它.Below是适配器类

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));

            }
        };



}

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

在if(convertView == null)块中只获取视图和setTag的引用,在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;

    }