Button 如何在android中使用自定义listview每行中的两个按钮来增加和减少textview值

Button 如何在android中使用自定义listview每行中的两个按钮来增加和减少textview值,button,convertview,Button,Convertview,这是我的代码,但当我运行它时,我不想要的listview的所有行的输出都是相同的 我想要所有行的独立输出 @Override public View getView(int position, View convertView, ViewGroup parent) { final ViewHolder holder; Log.v("ConvertView", String.valueOf(position)); if (c

这是我的代码,但当我运行它时,我不想要的listview的所有行的输出都是相同的

我想要所有行的独立输出

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

         final ViewHolder holder;


        Log.v("ConvertView", String.valueOf(position));

        if (convertView == null) {

            ViewHolder holder1 = new ViewHolder();
            LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            convertView = vi.inflate(R.layout.state_info, null);
            //  this.setPosition(position);

            holder = new ViewHolder();
            holder.position = getPosition();
            holder.state = stateList.get(position);
            holder.code = (TextView) convertView.findViewById(R.id.code);
            holder.name = (CheckBox) convertView.findViewById(R.id.checkBox1);
            holder.num = (TextView) convertView.findViewById(R.id.up_down_button_value);
            holder.up = (ImageButton) convertView.findViewById(R.id.up_down_button_up);
            holder.down = (ImageButton) convertView.findViewById(R.id.up_down_button_down);

            holder.value = (TextView) convertView.findViewById(R.id.qnt1);

            convertView.setTag(holder);

            holder.name.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    CheckBox cb = (CheckBox) v;
                    States state = (States) cb.getTag();
                    //Toast.makeText(getApplicationContext(),"Clicked on Checkbox: " + cb.getText() +" is " + cb.isChecked(),Toast.LENGTH_LONG).show();
                    state.setSelected(cb.isChecked());
                }
            });

          holder.up.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
                  _value++;
                  holder.num.setText(_value);
              }
          });

          holder.down.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
                  _value--;
                  holder.num.setText(_value);
              }
          });



        } else {
            holder = (ViewHolder) convertView.getTag();
        }



        States state = stateList.get(position);

        holder.code.setText(" (" + state.getCode() + ")");
        holder.name.setText(state.getName());
        holder.name.setChecked(state.isSelected());
        //holder.num.setText(state.getNum());

        holder.name.setTag(state);


        // checkIncButtonClick();
        // checkDecButtonClick();

        return convertView;

    }
输出:

       item     item quantity  : 2  b1 t1 b2
b1
b2
是两个按钮,
t1
是列表视图1行的文本视图,2是文本视图1的值


当我点击按钮时,值增加或减少,最后在2处赋值,只需对代码做一些更改:

   public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder = null;
        //Log.v(“ConvertViewâ€, String.valueOf(position));

        if (convertView == null) {
            LayoutInflater vi = (LayoutInflater) getSystemService(
                    Context.LAYOUT_INFLATER_SERVICE);
            convertView = vi.inflate(R.layout.state_info, null);

            holder = new ViewHolder();
            holder.code = (TextView) convertView.findViewById(R.id.code);
            holder.name = (CheckBox) convertView.findViewById(R.id.checkBox1);
            holder.num = (TextView) convertView.findViewById(R.id.up_down_button_value);
            holder.up = (ImageButton) convertView.findViewById(R.id.up_down_button_up);
            holder.down = (ImageButton) convertView.findViewById(R.id.up_down_button_down);
            convertView.setTag(holder);

            holder.name.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    CheckBox cb = (CheckBox) v;
                    States state = (States) cb.getTag();

                    state.setSelected(cb.isChecked());
                    if(!cb.isChecked())
                    {
                        RelativeLayout rl = (RelativeLayout) v.getParent();
                        TextView tv = (TextView) rl.findViewById(R.id.up_down_button_value);
                        tv.setText("0");
                        state.setNum(0);
                    }

                }
            });

            holder.up.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View v)
                {
                    ImageButton ib = (ImageButton) v;
                    States state = (States) ib.getTag();

                    state.setUpSelected(ib.isClickable());
                    RelativeLayout rl = (RelativeLayout) v.getParent();
                    TextView tv = (TextView) rl.findViewById(R.id.up_down_button_value);

                    int cnt = Integer.valueOf(tv.getText().toString());
                    cnt += 1;
                    state.setNum(cnt);


                    tv.setText(""+(state.getNum()));
                }
            });

            holder.down.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View v)
                {
                    ImageButton ib = (ImageButton) v;
                    States state = (States) ib.getTag();

                    state.setDownSelected(ib.isClickable());
                    RelativeLayout rl = (RelativeLayout) v.getParent();
                    TextView tv = (TextView) rl.findViewById(R.id.up_down_button_value);
                    int cnt = Integer.valueOf(tv.getText().toString());
                    cnt -=1;
                    if(cnt >= 0)
                    {
                        state.setNum(cnt);
                        tv.setText(""+(state.getNum()));
                    }
                    else
                    {
                        state.setNum(0);
                        tv.setText("0");
                    }

                }

            });
        }
        else
        {
            holder = (ViewHolder) convertView.getTag();
        }

        States state = stateList.get(position);
        holder.code.setText("(" + state.getCode() + ")");
        holder.name.setText(state.getName());
        holder.name.setChecked(state.isSelected());
        holder.num.setText(""+(state.getNum()));
        holder.name.setTag(state);
        holder.up.setTag(state);
        holder.down.setTag(state);
        return convertView;

    }
并在Sates中添加一些方法。java文件:

public void setNum(int num)
{
    this.num = num;
}

public int getNum()
{
    return num;
}

public void setUpSelected(boolean upSelected)
{
    this.upSelected = upSelected;
}

public boolean isUpSelected()
{
    return upSelected;
}

public void setDownSelected(boolean upSelected)
{
    this.downSelected = downSelected;
}

public boolean isDownSelected()
{
    return downSelected;
}

经过两周的努力,昨天我找到了这个问题的正确解决办法。