3

ActionBarSherlock を介して ActionMode を実装しました (ABS の Jake Wharton に感謝します!)。

とにかく、私は mActionMode.invalidate();ListView 項目をクリックするたびに を呼び出しています。これは、checkedCounter もインクリメント/デクリメントします。

次に public boolean 内onPrepareActionMode(ActionMode mode, android.view.Menu menu)で、checkedCounter の値に従って ActionMode の内容を設定する必要があります。

onPrepareActionMode のコードは次のとおりです。

    public boolean onPrepareActionMode(ActionMode mode,
                android.view.Menu menu) {
            Log.d("ASDASD", "INSIDE ONPREPARE!");
            if (mActionMode == null) {
                MenuInflater inflater = mode.getMenuInflater();
                inflater.inflate(R.menu.contextualmultiple, menu);
                return false;
            }
            if (checkedCount == 0) {
                mActionMode.finish();
            } else if (checkedCount == 1 && mActionMode != null) {
                mActionMode.setTitle(checkedCount + " Message Selected");
                MenuInflater inflater = mode.getMenuInflater();
                inflater.inflate(R.menu.contextualmultiple, menu);
                return true;
            } else if (checkedCount > 1) {
                mActionMode.setTitle(checkedCount + " Messages Selected");
                MenuInflater inflater = mode.getMenuInflater();
                inflater.inflate(R.menu.contextual, menu);
                return true;
            }
            return true;
        }

今、問題は、checkCount が 1 の場合、たとえば 3 つの項目でメニューを膨らませることです。ただし、カウンターが 2 にインクリメントすると、他のメニューが 1 項目で膨張しますが、最初にコンテンツを無効にすることなく、以前に膨張したメニューに追加されます。IE; 現在、ActionMode には、Contextual ActionBar の以前の 2 つ + 現在の 1 つがあります。

が呼び出されたときに ActionMode から既存のメニュー項目を削除するようにコードを変更するにはどうすればよいmActionMode.invalidate()ですか?

PS : onCreateActionMode() 関数は空です。onPrepareActionMode() は、mActionMode が null であり、初めて膨張するメニューがある場合を含め、すべてを実行します。

4

1 に答える 1

8

ハハ!ばかげた問題に対するとてつもなく簡単な解決策を見つけました!

この問題に遭遇する可能性がある他の人は、menu.clear();すべての inflate() ステートメントの前にステートメントを追加するだけです。

于 2012-10-15T06:37:45.550 に答える