私の意見では、この質問は読む価値があると思います...詳細に説明しようとしましたが、読みやすいように抽象化しました。
私は
ListView
カスタムによって移入されていますCursorAdapter
。メソッドで、
bindView()
子の色を設定してみます。この子は
LinearLayout
、リスト内のアイテムに使用されるルート レイアウトです。カスタム CursorAdapterR.layout.list_item
のメソッドで拡張された XML ファイルにあります。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 と GRAY でペイントされ、リストをスクロールしてもリストの色がおかしくなることはありません。色は変わらず、すべて問題ないようです。もちろん、DKGRAY と GRAY は必要ありません。DKGRAY が必要で、他の子はそのままにしておきます。¬¬
私を助けてください!
以下の画像。最初の列の * が異なる日付間でどのように機能するかを確認してください。ただし、色は機能しません。
1-スクロールを開始すると、一部の子はすでに欠陥があります:
2-上下にスクロールを終了し、最終的にすべての子に欠陥があります:
3-しかし、すべての子に色を設定すると、スクロールしてもうまくいきません。