我为我的ListView制作了一个适配器,如下所示:
SimpleAdapter adapter = new SimpleAdapter(this.getBaseContext(), listItem, R.layout.list_cell_icon, new String[] { "img", "title", "description" }, new int[] { R.id.img, R.id.title, R.id.description }) {
@Override
public boolean isEnabled (int position) {
if(position == 1 || position == 2) {
return false;
}
return true;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
if(position == 1 || position == 2) {
TextView tv = (TextView) v.findViewById(R.id.title);
tv.setTextColor(Color.DKGRAY);
}
return v;
}
};
现在我要在列表中禁用两个项目,然后我想以深灰色显示文本。我的问题是位置0的行中的文本颜色也变为深灰色。怎么会这样 ?我错过了什么吗?
答案 0 :(得分:1)
你需要添加这个:
TextView tv = (TextView) v.findViewById(R.id.title);
if(position == 1 || position == 2) {
tv.setTextColor(Color.DKGRAY);
} else {
tv.setTextColor(Color.WHITE);
}
原因是getView被多次调用,而不是按特定顺序调用,而getView循环视图。因此,TextView对象很可能始终是同一个对象。因此,您必须将颜色设置为视图。或者,您可以使用状态和选定的(如TextView上的setEnabled(false))