web-dev-qa-db-ja.com

HoneycombでプログラムによってActionModeメニューを閉じる方法は?

私のアプリケーションには、リストの各項目にチェックボックスが含まれているListFragmentがあります。ユーザーがこれらのチェックボックスのいずれかをクリックすると、アプリは常にActionModeコンテキストメニューを開始します。しかし、別のコンポーネントをクリックしたときにアプリケーションがActionModeメニューを閉じるようにしたいのですが。 Fragment#closeContextMenu()を試してみましたが、成功しませんでした。

どのようにすればそれを達成できますか?

37
kaneda

ActionModeを作成/開始するときはいつでも

mMode = startActionMode(....);

これを閉じるには、次の構文を使用します

if (mMode != null) 
 {
     mMode.finish();
 }
85
Vipul Shah
actionMode.finish();

Actionmodeからfinishメソッドが呼び出されると、アクションモードが破棄されます。

@Override
public void onDestroyActionMode(ActionMode mode) {

    //When action mode destroyed remove selected selections and set action mode to null


}

そしてdestroyメソッドはコールバックイベントから呼び出されます

Kotlinコード

ActionMode.Callbackを使用して、メニュー項目が押された後にActionModeを終了します

 private val actionModeCallbacks = object : ActionMode.Callback {
    override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean {
        mode.menuInflater.inflate(R.menu.menu_action_mode, menu)
        return true
    }

    override fun onPrepareActionMode(mode: ActionMode, menu: Menu): Boolean {
        return false
    }

    override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
        when (item.itemId) {
            R.id.menu_item -> {
                mode.finish() // after click of menu item close action mode
                return true
            }
        }
        return false
    }

    override fun onDestroyActionMode(mode: ActionMode) {


    }
}

startSupportActionMode

(activity as AppCompatActivity).startSupportActionMode(actionModeCallbacks)
1
Kishore Jethava