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 であり、初めて膨張するメニューがある場合を含め、すべてを実行します。