1

偶数行にのみ背景色(私の場合は青)を表示するカスタムSimpleCursorAdapterを実装したいと思います。私の実装は次のとおりです。

public class ColoredCursorAdapter extends SimpleCursorAdapter {
    String backgroundColor;

    public ColoredCursorAdapter(
            Context context,
            int layout,
            String backgroundColor,
            Cursor c,
            String[] from,
            int[] to,
            int flags) {
        super(
                context, 
                layout, 
                c, 
                from, 
                to, 
                flags);
        this.backgroundColor = backgroundColor;
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        super.bindView(view, context, cursor);
        if(cursor.getPosition() % 2 == 0) {
            view.setBackgroundColor(
                    Color.parseColor(backgroundColor));
        }
    }
}

最初は問題なく動作しますが、リストを上下に繰り返しスクロールすると、すべての行が青色になります。

前もって感謝します。

4

1 に答える 1

6

アダプタは、スクロールしながらアイテムビューをリサイクル(再利用)します。これが意味するのは、リストを前後にスクロールするときに、特定のカーソル位置に同じアイテムビューが使用されることが保証されていないということです。あなたの場合、現在の位置が偶数の場合にのみアイテムビューの背景色を設定しますが、現在扱っている特定のビューは、以前は奇数の位置で使用されていた可能性があります。したがって、時間の経過とともに、すべてのアイテムビューが同じ背景色を取得します。

解決策は簡単ですが、奇数と偶数の両方のカーソル位置の背景色を設定します。何かのようなもの:

@Override
public void bindView(View view, Context context, Cursor cursor) {
    super.bindView(view, context, cursor);
    if(cursor.getPosition() % 2 == 0) {
        view.setBackgroundColor(
                Color.parseColor(backgroundColor));
    }else{
        view.setBackgroundColor(
                Color.parseColor(someOtherBackgroundColor));
    }
}
于 2012-09-07T02:48:11.737 に答える