2

アプリにコンテキスト アクション バーを実装しようとしています。私は ListFragment を拡張しており、カスタム ArrayAdapter とリスト項目 xml を定義しています。アイテムをクリックすると正常に機能し、リスト アイテムの背景色が変わります。問題が発生しているのは、複数のアイテムを選択するときです。コンテキスト アクション バーが表示され、どのアイテムが選択されているかをログに記録しているため、アイテムに触れたときに実際にアイテムを選択していることがわかりますが、リスト アイテムの背景のハイライト色は変わりません。Fragments API を使用しているときに他の人がこの問題に遭遇したようで、適切に動作させるための一種のハックを考え出しました。ただし、リストに選択したアイテムが表示されない理由について、誰かが決定的な答えを持っているかどうか疑問に思っていました.

適切な測定のために、ここに私のコードがあります:

ListView list = getListView();
    list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
    list.setSelector(R.drawable.list_selector);

    // configure contextual action bar
    list.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
        @Override
        public void onItemCheckedStateChanged(ActionMode actionMode, int position, long id, boolean b) {
            Log.i("debug", "item " + position + " changed state");
        }

        @Override
        public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
            MenuInflater inflater = actionMode.getMenuInflater();
            inflater.inflate(R.menu.context_menu, menu);
            return true;  
        }

        @Override
        public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
            return false;
        }

        @Override
        public boolean onActionItemClicked(ActionMode actionMode, MenuItem item) {
            switch (item.getItemId()) {
                case R.id.delete:
                    Log.i("debug", "delete stuff");
                    return true;
                default:
                    return false;
            }
        }

        @Override
        public void onDestroyActionMode(ActionMode actionMode) {

        }
    });
4

2 に答える 2

4

カスタムリストアイテムビューにバックグラウンドセレクターを提供します。

<selector xmlns:android="http://schemas.android.com/apk/res/android"
    android:exitFadeDuration="@android:integer/config_mediumAnimTime">
<item android:state_activated="true" android:drawable="@drawable/number_bg_pressed" />
<item android:drawable="@android:color/transparent" />

APIdemos View / List/List16の例を参照します。

于 2012-11-18T07:02:07.317 に答える
0

SimpleCursorAdapter をセットアップするとき、レイアウトには android.R.layout.simple_list_item_activated_1 を使用します。カスタム テーマはより良い解決策かもしれません。私の場合、Android API のバージョンに応じてレイアウトを取得する静的メソッドがあります。

于 2014-01-26T23:14:46.727 に答える