Android setOnCreateContextMenuListener實現長按ListItem彈出不同選單
阿新 • • 發佈:2019-01-30
前一段時間做專案需要做一個效果:一個ListActivity,長按不同的item彈出的選單不一樣;如下圖所示我們長按不同的item需要彈出不同標題的menu:
長按事件可以使用ListView的setOnItemLongClick函式進行關聯,但是在響應的onItemLongClick函式裡面沒辦法呼叫ListView顯示選單。
在Android的選單分兩種:options menu 、context menu 。(也有分三種的:options menu 、context menu、sub menu)其中options menu是和Activity相關聯的,context menu 是和View關聯。我們需要點選控制元件出現的選單屬於context menu ;但是context menu 只能通過setOnCreateContextMenuListener來進行關聯。
實現這個效果需要理解對ListView的item長按之後發生的事情:
首先觸發的是onItemLongClick函式,執行onItemLongClick操作,然後根據onItemLongClick的返回值判斷是不是執行OnCreateContextMenuListener函式;如果onItemLongClick返回false,則會繼續執行OnCreateContextMenuListener函式,否則返回true,忽略OnCreateContextMenuListener函式。
因此我們可以在onItemLongClick的時候進行判斷並且準備好OnCreateContextMenuListener中需要用到的資料,然後在OnCreateContextMenuListener中呼叫這些資料顯示即可。
長按事件可以使用ListView的setOnItemLongClick函式進行關聯,但是在響應的onItemLongClick函式裡面沒辦法呼叫ListView顯示選單。
在Android的選單分兩種:options menu 、context menu 。(也有分三種的:options menu 、context menu、sub menu)其中options menu是和Activity相關聯的,context menu 是和View關聯。我們需要點選控制元件出現的選單屬於context menu ;但是context menu 只能通過setOnCreateContextMenuListener來進行關聯。
實現這個效果需要理解對ListView的item長按之後發生的事情:
首先觸發的是onItemLongClick函式,執行onItemLongClick操作,然後根據onItemLongClick的返回值判斷是不是執行OnCreateContextMenuListener函式;如果onItemLongClick返回false,則會繼續執行OnCreateContextMenuListener函式,否則返回true,忽略OnCreateContextMenuListener函式。
因此我們可以在onItemLongClick的時候進行判斷並且準備好OnCreateContextMenuListener中需要用到的資料,然後在OnCreateContextMenuListener中呼叫這些資料顯示即可。