【发布时间】:2015-09-18 09:31:23
【问题描述】:
我有一个 Android ListView,其中包含一个需要在单击时检查的按钮。点击事件似乎正在工作:
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
LayoutInflater inflater = this._context.getLayoutInflater();
if (convertView == null) {
convertView = inflater.inflate(R.layout.checkbox_cell, null);
holder = new ViewHolder();
holder.checkbox = (CheckBox) convertView.findViewById(R.id.button);
holder.textView = (TextView) convertView.findViewById(R.id.textView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
if(holder.checkbox.isChecked()) {
convertView.setBackgroundColor(Color.RED);
holder.textView.setBackgroundColor(Color.RED);
convertView.invalidate();
} else {
convertView.setBackgroundColor(Color.GREEN);
}
holder.checkbox.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Arrays.sort(_context.checkBoxIds);
int index = Arrays.binarySearch(_context.checkBoxIds, position);
if (((CheckBox) v).isChecked()) {
holder.textView.setPaintFlags(holder.textView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
} else {
holder.textView.setPaintFlags(holder.textView.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
}
holder.textView.setBackgroundColor(Color.RED);
notifyDataSetChanged();
}
});
return convertView;
}
您可能会看到我将背景更改为绿色初始,当我单击“复选框”时,背景需要为红色(这只是测试 UI 是否更新)。我试图更新onClick 中的视图,但这也不起作用。在onClick 之后,我调用notifyDataSetChanged() 以查看刷新时UI 是否发生变化。 holder.checkbox.isChecked() 似乎是真的,但是当我将背景设置为红色时,用户界面不会更新。有谁知道这里出了什么问题?我现在一头雾水。
【问题讨论】:
-
您的代码中是否有 @Override 注释,而您只是忘记为您的 onClickListener 发帖?
-
啊,是的,忘记发了。有覆盖:)
-
@LeonBoon : notifyDataSetChanged() 将要求 Listview 重绘视图,因此当它重绘自身时,它将引用一个新的 holder.checkbox.isChecked(),默认情况下为 false(猜),因此不会出现红色背景色。
-
请尝试使您想要更改背景的所有视图无效。例如,您说的是 convertView.setBackgroundColor(Color.GREEN);但是您并没有通过说 convertView.invalidate(); 来使其无效
-
当你点击复选框时它会被切换吗?