0

リストビューの1行の色を変更したい。

カスタムアダプタを作成しましたが、行のコンテキストメニューの色を変更したいと思います。

@Override
public boolean onContextItemSelected(MenuItem item) {
    switch(item.getItemId()) {

        case NOTE_BACKGROUND:
            AdapterContextMenuInfo infos = (AdapterContextMenuInfo) item.getMenuInfo();


    getListView().getAdapter().getView(infos.position,           null,null).setBackgroundColor(Color.GREEN);
            notes.notifyDataSetChanged();
            return true;
    }
    return super.onContextItemSelected(item);
}

しかし、それは機能しません...そして私は理由がわかりません..何かアイデアはありますか?どうもありがとう。

4

2 に答える 2

1

getView()アダプタを自分で呼び出すのではなく、呼び出しましょうListView。また、あるビューに色を設定してからリストをスクロールすると、同じ色のビューが別のアイテムに再び表示されます(によって再利用されListViewます)。

を使用しMap<Integer,Color>て、アダプタのアイテムのインデックスと色を保存します。

アダプタを上書きgetView()し、このマップから返されるビューの色を設定します。

notifyDataSetChanged()コンテキストメニューを選択し、インデックスと色をマップに配置してから、アダプタを呼び出します。

于 2013-01-04T11:40:02.253 に答える
0

これを行うnotifyDataSetChangedと、すべてのビューが再描画され、アダプターは行の新しいビューを返します。カスタムアダプタの場合、背景色(または同様のもの)を変更する行のインデックスを格納し、それに応じて正しいビューを返すフィールドがアダプタにあるはずです。

于 2013-01-04T11:37:24.113 に答える