【发布时间】:2017-02-13 11:37:10
【问题描述】:
我有一个ListView,我用自定义适配器填充了ListView 和TextView 和按钮。我在custom adapter 中为Button 生成了一个点击事件。在那个点击事件中我试图更改按钮文本和颜色,直到这里它工作正常但是当我上下滚动ListView 时,其他按钮的文本颜色会发生变化。过去几天我在这里停了下来......
public class CustomAdapter extends BaseAdapter {
Activity a;
ArrayList<String> Rollno;
ArrayList<String> Stdname;
ArrayList<String> Stdstatus;
public CustomAdapter(Activity a, ArrayList<String> rollno, ArrayList<String> stdname, ArrayList<String> stdstatus) {
this.a = a;
Rollno = rollno;
Stdname = stdname;
Stdstatus = stdstatus;
}
@Override
public int getCount() {
return Rollno.size();
}
@Override
public Object getItem(int position) {
return Rollno.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public class ViewHolder{
TextView rollno,name;
Button status;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder viewHolder=new ViewHolder();
LayoutInflater li=a.getLayoutInflater();
View v=li.inflate(R.layout.custom,parent,false);
viewHolder.rollno=(TextView)v.findViewById(R.id.crollno);
viewHolder.name=(TextView)v.findViewById(R.id.cname);
viewHolder.status=(Button)v.findViewById(R.id.btn1);
viewHolder.rollno.setText(Rollno.get(position));
viewHolder.name.setText(Stdname.get(position));
viewHolder.status.setText(Stdstatus.get(position));
viewHolder.status.setTag(0);
viewHolder.status.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final int status1 = (Integer) v.getTag();
if (status1 == 1) {
viewHolder.status.setText("P");
viewHolder.status.setBackgroundColor(Color.GREEN);
v.setTag(0);
} else if (status1 == 2) {
viewHolder.status.setText("A");
viewHolder.status.setBackgroundColor(Color.RED);
v.setTag(1);
} else if (status1 == 3) {
viewHolder.status.setText("L");
viewHolder.status.setBackgroundColor(Color.BLUE);
v.setTag(2);
} else {
viewHolder.status.setText("H");
viewHolder.status.setBackgroundColor(Color.YELLOW);
v.setTag(3);
}
}
});
return v;
}
}
【问题讨论】:
-
您有这个问题,因为 ListView 正在重用单元格,因此会显示先前单元格的状态。您需要将按钮的状态存储在某处并在
getView中检查状态。 -
我如何存储按钮的状态。我是 android 新手,你能给我那个代码吗?提前谢谢你的帮助