1

リストビューで行が追加されているビューがあります。リスト アイテムには、水平方向に次のようなものがあります: チェックボックス - チェックボックス、アイテム名 - テキストビュー、マイナス ボタン - イメージボタン、数量 - テキストビュー、追加ボタン。- イメージボタン

追加またはマイナス クリックに基づいて数量を更新する必要があります。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) ブロックでは、ビューの参照を取得してタグを設定し、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 に答える