我认为这个问题值得一读,在我看来......我试图详细解释,但抽象出来以方便您阅读。
我有一个
ListView
由自定义填充的CursorAdapter
.在
bindView()
方法中,我尝试设置孩子的颜色。这个孩子是一个
LinearLayout
,用于列表中项目的根布局。它在 XML 文件中,在自定义 CursorAdapterR.layout.list_item
的方法中膨胀。newView()
我使用下面的代码设置背景颜色。
LinearLayout root = (LinearLayout) view.findViewById(R.id.list_item_root); // ... if (isEvenDay(cal)) { tvDate.setText(tvDate.getText() + " *"); root.setBackgroundColor(Color.DKGRAY); }
setBackgroundColor
除了if 块之外,不要担心任何事情。你会看到的。
预期的行为:一些孩子将被绘制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-但是当我为所有孩子设置颜色时,滚动不会搞砸: