2014-03-04 63 views
4

要註冊一個OnClickListener我總是致電setOnClickListener(listener)Button。現在我已經看到了一段代碼,通過使用android:onclick="nameOfMethod"在佈局中定義了單擊事件,並實現了帶有View參數的方法。按鈕setOnClickListener()與android:onclick

添加OnClickListener這兩種方式有什麼不同嗎?哪一個被推薦?

+1

注意,使用的onClick方法應該在你的語境。在片段中這樣做,您將不得不在包含片段的活動中定義方法。你必須確保proguard不會刪除這些方法。 –

回答

5

帶有XML綁定函數的onClickonClick與它調用的函數之間的綁定。該函數將只有一個參數以使onClick正常工作。

OnClickListener是任何類都可以實現的接口。由於它是任何類可以實現的接口,因此這更加靈活。

如果需要,您可以輕鬆地將一個偵聽器實現與另一個偵聽器實現交換。

OnClickListener使您能夠從觸發事件的視圖中分離單擊事件的動作/行爲。雖然簡單的情況下,這不是什麼大不了的,複雜事件處理,這可能意味着該代碼

換句話說更好的可讀性和可維護性 -

XML onClick有利於在Java一個固定的實現碼。 OnClickListener適用於更復雜的代碼和多個按鈕。但就基本功能而言 - 它們都做同樣的事情。

1

添加OnClickListener這兩種方式有什麼不同嗎?哪一個被推薦?

不,他們沒有什麼兩樣,都將正常工作,但是從我的經驗,我不建議你使用一個簡單的原因XML佈局文件的XML onClick的選擇,因爲他們的名字代表的佈局和代表創建你設計的視覺方面。

保留Java的一部分,將Java文件:)

0

我活動佈局我可以定義方法調用

<TextView 
     android:id="@+id/search_hot_text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:clickable="true" 
     android:onClick="onClickHotWords" 
     android:text="@string/search_hot" 
     /> 

然後在Java中

// defined in layout/search.xml 
public void onClickHotWords(View v){ 
    FSLogcat.d(TAG, "onClickHotWords"); 
    requestHotWords(); 
} 

但我不得不將其改寫爲
mSearchHotWordsLabel.setOnClickListener(new OnClickListener() {
使用佈局內部片段時。

也有是proguard的相關問題mSearchHotWordsLabel 看到android:onClick not working with ProGuard

相關問題