我有一个奇怪的问题。几个迭代前一切都运行良好,但现在它已不再适用了。我已经设置了一个setMultiChoiceModeListener,让用户从ListView中选择要删除的多个元素。要将元素标记为已选中,我执行了此操作:
public void onItemCheckedStateChanged(ActionMode mode,int position, long id, boolean checked){
Log.d(TAG,(checked ? "Checked " : "Un-checked ")+ ((TextView) listView.getChildAt(position).findViewById(R.id.label)).getText().toString());
if (checked){
listView.getChildAt(position).setBackgroundColor(Color.parseColor("#6633b5e5"));
}else{
listView.getChildAt(position).setBackgroundColor(Color.parseColor("#00000000"));
}
}
Log语句是要调试的,它会正确输出。在第一次长按,激活MultiChoiceModeListener,它输出" Checked text"。我还用Log语句检查了它的颜色,然后输出正确的颜色值。唯一的问题是,它没有被绘制出来。如果我继续选择项目,他们将改变颜色,如果我取消选择并重新选择项目,它会改变颜色。所以它只是第一个没有改变颜色的被检查项目,即使它被计入例如onActionItemClicked中。整个事情看起来有点乏味,所以我也想知道是否有更好的方法来做到这一点。我已经研究过在html文件中设置选择器但没有运气。我可以更改按下的颜色,但不能更改选中的颜色。
任何帮助表示感谢。
答案 0 :(得分:2)
您正在尝试使用资源,因此您应该执行以下操作
listView.getChildAt(position).setBackgroundResource(Color.parseColor(<Your-Color>))
此外,如果您想跳过该解析,您可以将该颜色放在color.xml
中,然后使用R.color.<your-color-name>
来引用它。
listView.getChildAt(position).setBackgroundResource(R.color.<Your-Color>)