滚动ListView会将TextView颜色更改回原始颜色

时间:2013-02-18 11:19:54

标签: android listview colors textview

基本上,我的问题与此类似:

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);

2 个答案:

答案 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 ="假" 它会解决你的问题。