2010-06-30 28 views
0

我有一個ListView,它可以有一個上下文菜單,或不。我分別使用registerForContextMenuunregisterForContextMenu,並且在註冊本身或與顯示/工作的上下文菜單相關的任何內容都沒有問題。可以unregisterForContextMenu完全取消註冊一個View?

當一個視圖被註冊爲一個上下文菜單時,當用戶點擊它時,它的背景從橙色逐漸變爲黃色,然後變爲白色。當一個視圖從未註冊過上下文菜單(它保持相同的顏色)時,不會發生這種情況。但是,當我使用unregisterForContextMenu取消註冊相關視圖時,此效果仍處於活動狀態,可能會讓用戶感到困惑 - 因爲效果,他/她會期待上下文菜單。這表明unregisterForContextMenu沒有完全扭轉registerForContextMenu的影響。

我的問題是:有沒有辦法來完全註銷從得到一個上下文菜單中查看?

如果有人對(un)registerForContextMenu如何在內部工作有更清楚的瞭解,請分享您的想法。

編輯:我剛剛看到這不適用於HTC的感覺界面,因爲沒有實現「美白」效果。所以這個問題只適用於默認的Android界面。

+0

出於好奇,爲什麼要註冊,然後取消註冊上下文菜單?如果您的活動未使用上下文菜單,請勿註冊。 – CommonsWare 2010-06-30 11:46:14

+0

假設有類別,子類別(多個級別)和文章。所有文章都支持上下文菜單,所有類別(和子類別)都不支持。我的客戶希望我以統一的方式展示這一點。所以我顯示類別,當一個類別被點擊時,我只改變ListView的內容。這是我想取消訂閱上下文菜單的時刻。 – Shade 2010-06-30 12:30:23

回答

7

原來很簡單。 registerForContextMenu (View v)只是簡單地叫v.setOnCreateContextMenuListener (this),指的是調用活動作爲OnCreateContextMenuListener。問題是,在View類中,setOnCreateContextMenuListener正在檢查視圖是否可以長時間點擊,如果不是,則將其設置爲。但是,方法unregisterForContextMenu (View v)只能調用v.setOnCreateContextMenuListener (null)。但setOnCreateContextMenuListener不檢查傳遞的OnCreateContextMenuListener是否爲null,因此始終讓該視圖長久可點擊。

解決方案是手動撥打v.setLongClickable (false)