Button 如何在android中使用自定义listview每行中的两个按钮来增加和减少textview值
这是我的代码,但当我运行它时,我不想要的listview的所有行的输出都是相同的 我想要所有行的独立输出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
@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;
}
经过两周的努力,昨天我找到了这个问题的正确解决办法。