3

偶数行を白、奇数行をsdグレーにする必要がありますListView(これを使用ArrayAdapterして入力します)。layouts色違いで使うとbackground選択が効かないので使えません。私がしていることは、このコードを使用してgetView()、行が奇数か偶数かを確認し、条件に応じて背景を適用することです。

if (position % 2 == 0) {
convertView.setBackgroundDrawable(getResources().getDrawable(R.drawable.dark_item_background));}

ただし、最初に表示される行のみが正しい背景色であるため、これは期待どおりに機能しません。一番下までスクロールした後(リサイクルメカニズムのためだと思います)、私は非常に奇妙な振る舞いをしていて、その理由がわかりません。これが私が最初のアイテムのために持っているものです(正しいケース):

ここに画像の説明を入力してください

これが私がスクロールした後に持っているものです:

ここに画像の説明を入力してください

4

4 に答える 4

4

IngetView()オブジェクトは、パフォーマンスを向上させるために再利用されます。そのため、この奇妙な動作が発生します。問題を解決するには、ifを追加するだけです-else

if (position % 2 == 0) {
   convertView.setBackgroundDrawable(getResources().getDrawable(R.drawable.dark_item_background));
} else {
   convertView.setBackgroundDrawable(getResources().getDrawable(R.drawable.light_item_background));
}
于 2013-01-09T10:10:16.127 に答える
1

変換ビューの背景はすでに暗い可能性があるため、再利用された変換ビューのデフォルトの色を最初に設定する必要があると思います。したがって、次のようになります。

convertView.setBackgroundDrawable(getResources().getDrawable(R.drawable.light_item_background));
if (position % 2 == 0) {
    convertView.setBackgroundDrawable(getResources().getDrawable(R.drawable.dark_item_background));
}
于 2013-01-09T10:07:25.440 に答える
1

ELSEの原因も設定する必要があります。そうしないと、再利用メカニズムのためにすべての背景が黒くなります。

if (position % 2 == 0) {
   convertView.setBackgroundDrawable(getResources().getDrawable(R.drawable.dark_item_background));
} else {
   convertView.setBackgroundDrawable(getResources().getDrawable(R.drawable.light_item_background));
}
于 2013-01-09T10:09:28.543 に答える
1

リストビュー行の背景を次のように設定する必要があると思います。

if (position % 2 == 0) {     

convertView.setBackgroundDrawable(getResources()。getDrawable(R.drawable.dark_item_background));
}
else
{convertView.setBackgroundDrawable(getResources()。getDrawable(R.drawable.light_item_background));
}

于 2013-01-09T10:09:59.230 に答える