0

(動的) ListView で異なる行に異なる色を設定することは可能ですか?

アイテムクリックイベントリスナーなどで背景色を設定できることは知っていますが、アダプターにアイテムを追加するときに動的に色を設定する方法はありますか?

大丈夫じゃない?

itemAdapter = new ArrayAdapter<Bundle>(this, android.R.layout.simple_list_item_1, itemArray) {
         @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                View row;
                LayoutInflater inflater = (LayoutInflater)getSystemService
                  (Context.LAYOUT_INFLATER_SERVICE);

                if (null == convertView) {
                    row = inflater.inflate(android.R.layout.simple_list_item_1, null);
                } else {
                    row = convertView;
                }

                row.setBackgroundColor(getItem(position).getInt("color"));
                TextView tv = (TextView) row.findViewById(android.R.id.text1);
                tv.setText(getItem(position).getString("text"));

                return row;
            }
     };
4

1 に答える 1

2

独自のカスタムListAdapterを作成する必要があります。データが配列またはArrayListの場合は、ArrayAdapterを拡張し、getView()メソッドをオーバーライドするだけです。実装の作成には豊富な回答がありgetView()ますが、特定の質問に対する基本的な回答は、いくつかのロジックを追加することです。

public View getView(int pos, View convertView, ViewGroup parent) {

    //do initialization work with the convertView

    if(/*some logic determining whether the view should be colored*/) {
        convertView.setBackgroundColor(myColor);
    } else convertView.setBackgroundColor(defaultColor);
}

ビューはリサイクルおよび再利用され、そうでない場合は予期しない状態になる可能性があるため、論理基準を満たしていない場合は、別の色に戻すことを覚えておくことが重要です。

于 2012-07-02T16:43:43.373 に答える