2011-01-09 51 views
27

有什麼方法可以從android中的View中刪除監聽器?我有一個Checkbox,我附上了CheckChangedListener。問題在於調用setChecked()會導致我的偵聽器觸發。從android中的視圖中刪除監聽器

如果我不能只是刪除一個監聽器,有沒有辦法阻止監聽器在我手動調用setChecked()而不是從觸摸事件中檢查時觸發?

回答

59

那麼,我找到了答案。這似乎沒有記錄在任何地方,但我經歷了View類的代碼,並且如果您將null傳遞給setClickListener方法,它將刪除該偵聽器。

checkbox.setOnCheckChangedListener(null); 

這應該適用於任何事件監聽器。

+1

對使用​​無證功能要小心,它們可以隨時更改。 – 2011-01-09 20:45:57

+4

我不會完全稱之爲「無證的功能」。如果視圖支持給定類型的單個偵聽器,並且您將該偵聽器設置爲null,那麼您還會期望發生什麼? :) – adamp 2011-01-09 21:19:15

2

在調用setChecked()之前,您可以嘗試將偵聽器設置爲不執行任何操作的偵聽器,然後再將有用的偵聽器返回。

5

你爲什麼得到checkChangeListener?如果你使用onClicklListener它可能適合你?

-4

你只需使用removeListener(this)。我在這裏錯過了什麼嗎?

0

我有類似的問題,與微調視圖。我的解決方案是創建一個類成員變量,我檢查OnItemSelected方法。在以編程方式更改Spinner的內容/選擇之前,我將此變量設置爲true。當OnItemSelected發生火災時,如果變量爲true,我將其更改爲false而只是return而不做任何工作。這個缺點是它使得故障排除變得困難,因爲這個變量被設置在我的代碼中。