2

2番目のアイテムごとに異なる色を持つListViewがあります(例:白->灰色->白->灰色など)。最初は機能しているように見えますが、スクロールを開始するとすぐに背景色のレンダリング失敗したようです:他の色がアイテムにランダムに設定されています。また、もう一度上にスクロールすると、最初は色が正しかったアイテムに発生します。誰かがなぜこれが起こっているのか教えてもらえますか?

アダプターでこれを試しました:

    if((position % 2) == 1) {
        layoutHolder.setBackgroundColor(getContext().getResources().getColor(R.color.light_green));
    }

そしてこれは私のListFragmentにあります:

    private AsyncTask<Void, Void, Void> fillList = new AsyncTask<Void, Void, Void>() {

    @Override
    protected Void doInBackground(Void... params) {
        addListItems();
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        for (int i = 1; i < getListView().getChildCount()-1; i = i+2) {
            LOGI(TAG, "for-loop " + String.valueOf(i));
            getListView().getChildAt(i).setBackgroundColor(getSherlockActivity().getResources().getColor(R.color.light_green));
        }
    }   
};

アップデート:

少しログを記録したところ、画面に表示されているよりも多くの要素を追加し、ListViews の子の数を確認すると、ListView は最初に画面に表示されている子のみを保持し、残りは次のように見えることがわかりました。スクロールが完了するとロード/追加されます。

4

3 に答える 3

4

あなたのアダプターでは、このコードを使用してください..その作業..else条件を提供する必要があります。

if ( position % 2 == 0 ){
                convertView.setBackgroundColor(Color.GREEN);
            }else{
                convertView.setBackgroundColor(Color.RED);
            }

ここに画像の説明を入力

于 2013-01-17T12:41:12.200 に答える
1

アダプタの getView() でこれを試してください

if((position % 2) == 1) {
                  LayoutHolder.setBackgroundColor(getContext().getResources().getColor(R.color.white));
}else{
            LayoutHolder.setBackgroundColor(getContext().getResources().getColor(R.color.gray)
}
于 2013-01-17T12:21:19.273 に答える
0

これを onPostExecute() に追加してみてください

getListView().getChildAt(i).setCacheColorHint(getSherlockActivity().getResources().getColor(R.color.light_green));
于 2013-01-17T12:22:58.087 に答える