【发布时间】:2011-11-20 20:05:12
【问题描述】:
我认为这个问题值得一读,在我看来……我试图详细解释,但为了方便您阅读而进行了抽象。
我有一个由自定义
CursorAdapter填充的ListView。在
bindView()方法中,我尝试设置孩子的颜色。这个孩子是
LinearLayout,用于列表中项目的根布局。它在 XML 文件R.layout.list_item中,在自定义 CursorAdapter 的newView()方法中膨胀。-
我使用下面的代码设置背景颜色。
LinearLayout root = (LinearLayout) view.findViewById(R.id.list_item_root); // ... if (isEvenDay(cal)) { tvDate.setText(tvDate.getText() + " *"); root.setBackgroundColor(Color.DKGRAY); }
别担心 if 块中的 setBackgroundColor 以外的任何事情。你会看到的。
预期行为:一些孩子将被绘制DKGRAY 并将 * 附加到某个 textView。其他将是默认颜色并且没有这个 *.我使用这个 * 标记只是为了确保它不是(直接)我的代码。
行为:当 ListView 最初显示时,它看起来很好,正如预期的那样。当我滚动列表时,它变得“奇怪”(我不明白)并且一些孩子会开始改变颜色,直到所有孩子都被涂上DKGRAY。
现在,最糟糕的是这行得通:
LinearLayout root = (LinearLayout) view.findViewById(R.id.list_item_root);
// ...
if (isEvenDay(cal)) {
tvDate.setText(tvDate.getText() + " *");
root.setBackgroundColor(Color.DKGRAY);
} else {
root.setBackgroundColor(Color.GRAY);
}
正确的孩子会被绘制成 DKGRAY 和 GREY,滚动列表不会使列表颜色变得疯狂。颜色没有变化,一切似乎都很好。除了,当然,我不想要 DKGRAY 和 GREY,我想要 DKGRAY,别管其他孩子。 ¬¬
请帮帮我!
图片如下。看看第一列中的 * 在不同日期之间如何正常工作,但颜色却不行。
1- 我开始滚动,一些孩子已经有缺陷:
2-我完成了上下滚动,最后所有的孩子都有缺陷:
3- 但是当我为所有孩子设置颜色时,滚动不会搞砸:
【问题讨论】:
-
我怀疑这个whooooole问题可能非常简单。但是当你想不通的时候你就想不通......
标签: android listview layout colors android-cursoradapter