2013-02-10 47 views
1

我想把我所有的ContextMenu邏輯放在一個單獨的類中,但似乎我無法在這個類中識別某人是否選擇了一個項目。如何在單獨的類中提供所有ContextMenu邏輯?

我有一個主要活動的應用程序。除此之外,此活動還包含一個列表視圖。這個列表視圖應該包含一個上下文菜單,所以我定義它對應其Clicklistener:

MyListener myListener = new MyListener(); 

listview.setOnItemClickListener(myListener); 
listview.setOnCreateContextMenuListener(myListener); 

myListener的同時實現了OnItemClickListener和OnCreateContextMenuListener。我這樣做是爲了保持類的可讀性(就像之前提到的那樣,已經有一些其他的UI組件和一些邏輯)。到目前爲止,一切都像一種魅力。單擊被識別,並顯示ConextMenu。

現在我也希望MyListener也對在ContextMenu中選擇的項目作出反應。不幸的是,只有活動及其相應的子類似乎提供了像onContextItemSelected(menuItem項)這樣的方法。所以我不得不把這個邏輯放到我的主要活動中,並通過這樣做來分配我的ContextMenu邏輯(我也測試了它,它可以工作,但是對我來說發佈邏輯在我看來就像是一個不行)。

我想念這裏的東西嗎?有沒有辦法以另一種方式爲我的列表視圖定義某種ContextMenu ClickListener,而不是將它放在我的主要活動中?或者我在不認識的情況下做了一些不好的練習?

期待您的意見!

乾杯無眼

回答

0

一個快速簡便的解決方案是將點擊轉發給您的MyListener類。
在您的MyListener課程中創建一個新方法。理想情況下,我將它稱爲它就像原來的方法:

public boolean onContextItemSelected(MenuItem item)
在這種方法中,你實現你的邏輯。

然後讓你的MyListener變成你的Activity的一個字段。
現在,只需重寫你的ActivityonContextItemSelected(MenuItem item)和點擊轉發到你的監聽器類:

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    return myListener.onContextItemSelected(item); 
} 
+0

那麼肯定,這將是可能的。在我看來,有可能將外部類定義爲單擊和上下文點擊的監聽器,但無法定義後面的內容(如果沒有可能對此內部發生的任何事情做出反應的可能性,則可以設置單獨的類來設置ContextMenu ContextMenu是相當無用的)。這就是爲什麼我問我是否做錯了什麼或錯過了什麼。不管怎麼說,還是要謝謝你! – Eyeless 2013-02-10 15:45:33

相關問題