34

在我的應用程序中有一個ListFragment,其中列表中的每個項目都包含一個複選框。只要用戶點擊其中一個複選框,應用程序就會啓動一個ActionMode上下文菜單。 但我希望應用程序在單擊另一個組件時關閉ActionMode菜單。 我試過Fragment#closeContextMenu()沒有成功。如何在Honeycomb上以編程方式關閉ActionMode菜單?

任何想法我怎麼能做到這一點?

回答

78

當你正在創建/開始ActionMode通過

mMode = startActionMode(....); 

創建駁回它使用以下語法

if (mMode != null) 
{ 
    mMode.finish(); 
} 
+0

我覺得我太累了,我甚至沒有穿過我的腦海裏。謝謝你Vipul! – kaneda

+9

這個問題沒有更多的「本地」方法嗎?沒有創建成員的東西? –

+0

注意:有些東西讓我--Mode需要成爲活動的類字段(如命名所示),因爲您無法聲明它並在相同的回調中使用它。 – Chris

0

科特林代碼

使用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)