2013-08-16 100 views
18

我遵循Google的Android教程,發現按照標題獲得小部件回調的方式有兩種(或者只有onClick - 我不知道)。最佳實踐android:onClick XML屬性或setOnClickListener?

我是一個高級Java Swing開發人員,所以內部類的方法讓我有賓至如歸的感覺:)但我明白xml方法更新 - 所以谷歌必須添加它的原因。

這是什麼推理?在android平臺上這樣做是否「更好」,現在應該避免使用內部類方法(在支持它的版本上)?

+0

檢查鏈接,這是關係到你的問題..... [鏈接](http://stackoverflow.com/questions/7453299/difference-between-onclick-event-and-onclicklistener) – AndroUser

+6

讀過那話題,雖然它觸及了這個問題,但它更多的是技術性質,並沒有討論最佳實踐 - 因此我創造了一個新話題。 –

+1

@martin_dk:從你的角度來看,這個問題是否應該重新開放以接受新的答案?因爲這不是一個重複的問題。 – gunar

回答

0

您可以通過xml和編程方式定義像按鈕這樣的小部件。可以賦予兩種方式添加偵聽器的功能。所以相互之間沒有優勢。

如果你想從XML做佈局特定的工作,android給了你一個這樣做的能力。

但有人可能會定義佈局佈局,然後將不得不從代碼定義點擊監聽器。

但也有人使用它的混合。

我希望你明白我的意思。

如果你以編程方式做,你可以寫onClick(),並在寫一個開關的情況下,並基於視圖ID你可以定義我個人認爲更容易使用的行爲。

19

我沒有使用XML onClick屬性,因爲這意味着使XML膨脹的Activity必須實現onClick值方法。但是,如果您進行一些重構並更改此方法,那麼如果更改與XML不相關,則會得到運行時異常。或者如果你想使用一些includemerge

要添加更多信息:如果使用片段,您必須將delegate the click event添加到定義了onClick XML屬性的片段中。

它確實代碼少,但爲了維護/重構這樣的代碼,它使事情變得困難並且容易出錯。所以不要在生產代碼中使用它。

+1

有道理(在我的世界),感謝您的輸入! –

+1

老兄,這是唯一合乎邏輯的答案......我會更加苛刻,並說使用onClick屬性的任何人都是愚蠢的......這是使用反射的一種方式,我永遠不會使用,而且我非常震驚Google仍然在他們的文檔中有這個。 – TacB0sS

0

如果按鈕將始終存在並且始終執行相同的操作,則使用聲明式事件處理程序是有意義的。就像你甚至不需要爲該按鈕做一個findViewById()一樣。

如果您可能想要啓用/禁用點擊或動態生成按鈕等,那麼在代碼中動態設置事件處理程序是有意義的。

-1

View.OnClickListener是一個接口,它定義了onClick(View)方法。

您將在代碼中實現接口和方法。