我有一个 ListView
,我使用自定义适配器用 TextView
和 Button
填充了 ListView
。我有在自定义适配器中为该 Button
生成了一个点击事件。在那个点击事件中,我试图更改按钮文本和颜色,到这里它工作正常但是当我滚动 ListView
上下其他 Button
的文字颜色在变化。我从过去几天就停在这里了......
这是我到目前为止尝试过的一些代码
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
View v=convertView;
final ViewHolder holder;
if(convertView ==null)
{
convertView = mInlfater.inflate(R.layout.attendancelistview,null);
holder = new ViewHolder();
holder.b1 = (Button)convertView.findViewById(R.id.row3);
holder.tv1 = (TextView)convertView.findViewById(R.id.row1);
holder.tv2 = (TextView)convertView.findViewById(R.id.row2);
convertView.setTag(holder);
}
else
{
holder =(ViewHolder) convertView.getTag();
}
//List<StudentData> data = list.get(position).Rno;
holder.tv1.setText(String.valueOf(list.get(position).Rno));
holder.tv2.setText(list.get(position).StudentName);
holder.b1.setText(list.get(position).Attendance);
holder.b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
if(holder.b1.getText().equals("Present"))
{
holder.b1.setText("Absent");
//list.get(position).put("Attendance", "Absent");
holder.b1.setTextColor(Color.RED);
}
else if(holder.b1.getText().equals("Absent"))
{
holder.b1.setText("Present");
//list.get(position).put("Attendance", "Present");
holder.b1.setTextColor(Color.GREEN);
}
String rno1= String.valueOf(holder.tv1.getText());
name=String.valueOf(holder.tv2.getText());
}
});
return convertView;
}
static class ViewHolder
{
Button b1;
TextView tv1,tv2,tv3;
}
最佳答案
如果 holder.b1 按钮文本发生变化,则原因是您没有正确处理 getView。
我想这会返回一些整数 id
list.get(position).Rno
例如,您需要将该 ID 存储在某个数组列表中
//Declare this outside of getView().
ArrayList<Integer> your_number = new ArrayList();
然后在你的按钮中点击
holder.b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
if(holder.b1.getText().equals("Present"))
{
holder.b1.setText("Absent");
//list.get(position).put("Attendance", "Absent");
holder.b1.setTextColor(Color.RED);
your_number.add(list.get(position).Rno);
}
else if(holder.b1.getText().equals("Absent"))
{
holder.b1.setText("Present");
//list.get(position).put("Attendance", "Present");
holder.b1.setTextColor(Color.GREEN);
your_number.remove(list.get(position).Rno);
}
String rno1= String.valueOf(holder.tv1.getText());
name=String.valueOf(holder.tv2.getText());
}
});
最后在你的 getView() 中
if (your_number.contains(list.get(position).Rno)){
//set your text
}else{
//Set your text
}
关于Android ListView 按钮文本颜色在从上到下滚动时发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30930717/