5

我希望能夠動態改變OnItemClickListenerListView。然而,API不清楚這是否可以接受,也不清楚如果我這樣做會有什麼結果。從多個類調用setOnClickListener是否只導致一個回調?

我想要的是,如果我從一個類調用listView.setOnItemClickListener(),然後再從另一個類調用,只有最近的類才能獲得回調。

這個問題偶然也可以適用於SetOnClickListener()

該API可能會以這種方式運行,但也可以實現爲使所有調用setOnItemClickListener的類都獲得回調。

Android API實際實現了哪些行爲?

回答

9

退房的AdapterView.setOnItemClickListener()的源代碼here

/** 
* Register a callback to be invoked when an item in this AdapterView has 
* been clicked. 
* 
* @param listener The callback that will be invoked. 
*/ 
public void setOnItemClickListener(OnItemClickListener listener) { 
    mOnItemClickListener = listener; 
} 

在Java世界中,通常setter方法將刷新前值和對象的實例變量設置爲新值。所以你所說的行爲是只有最近的類獲得回調。


它可能反而被實現,使得調用setOnItemClickListener獲取回調的所有類。

在Java世界中,這也是可能的,在這種情況下,作爲一個良好的面向對象編程慣例,我們通常將其命名爲addOnItemClickListener(),這是更具體的,使用監聽器店的名單/管理範圍內的乘法聽衆實際執行。這不是如何在API中實現AdapterView.setOnItemClickListener()。

+0

提出這個問題之後,我想到了添加一個監聽器和設置一個監聽器的術語的區別,並且認爲如果它沒有像我預期的那樣行事,那麼這將是一個誤稱。這看起來更像是一種人類語言語義,而不是Java特定的約定。我想我只是希望閱讀API文檔中指定的內容。感謝您的澄清。 – 2012-03-27 12:59:19

4

根據需要,您可以隨意多次使用setOnItemClickListener(),只會使用最新的OnItemClickListener。

0
String className = "MyOnClickListener"; 
obj = (OnClickListenerInterface)(Class.forName(className).newInstance()); 

您必須創建監聽器的接口,但你可以在不同的clasess實施不同的聽衆,然後叫他們中的每一個動態喜歡的是顯示在該代碼部分。

相關問題