基本上,我的问题与此类似:
Scrolling a ListView changes everything from White to Black
唯一的区别是我正在处理一个在滚动时改变颜色的TextView(TextView在ListView中)。
如果对于TextView有一个类似于setCacheColorHint(Color.WHITE)的方法,我查了一下 - 我没找到它。
也许我应该动态设置默认的TextColor?因为目前,它是用XML设置的,然后在代码中进行了更改。
我该如何处理?
将颜色更改为蓝色的代码:
private void highlightSelectedFile(View vw)
{
TextView fileName = (TextView) vw.findViewById(R.id.file_name);
//Log.v("color: ", Integer.toString(fileName.getCurrentTextColor()));
if(fileName.getCurrentTextColor() == Color.BLACK) {
fileName.setTextColor(Color.BLUE);
} else {
fileName.setTextColor(Color.BLACK);
removeFromSelectedFiles(new File(fileName.getText().toString()));
}
}
滚动ListView后,这些TextView会返回BLACK:
ListView lv = (ListView) ac.findViewById(android.R.id.list);
答案 0 :(得分:0)
在您的适配器中,您可能正在使用将数据应用于Adapter
中的视图的数据项。滚动时,您的View
会被回收,而getView()
会被另一个View
对象调用。您的问题很容易解决。只需在数据项中再添加一个int color;
变量,然后像这样使用它。
public View getView(int position, View convertView, ViewGroup parent) {
// efficient stuff here
// after applying your data
fileName.setTextColor(data.color);
}
也改变了这个方法:
private void highlightSelectedFile(DataItem data) {
if(data.color == Color.BLACK) {
data.color = Color.BLUE;
} else {
data.color = Color.BLACK;
removeFromSelectedFiles(new File(fileName.getText().toString()));
}
// to update ListView
myAdapter.notifyDataSetChanged();
}
答案 1 :(得分:0)
只将此语句放在XML文件的列表中。机器人:scrollingCache ="假" 它会解决你的问题。