要註冊一個OnClickListener
我總是致電setOnClickListener(listener)
在Button
。現在我已經看到了一段代碼,通過使用android:onclick="nameOfMethod"
在佈局中定義了單擊事件,並實現了帶有View
參數的方法。按鈕setOnClickListener()與android:onclick
添加OnClickListener
這兩種方式有什麼不同嗎?哪一個被推薦?
要註冊一個OnClickListener
我總是致電setOnClickListener(listener)
在Button
。現在我已經看到了一段代碼,通過使用android:onclick="nameOfMethod"
在佈局中定義了單擊事件,並實現了帶有View
參數的方法。按鈕setOnClickListener()與android:onclick
添加OnClickListener
這兩種方式有什麼不同嗎?哪一個被推薦?
帶有XML綁定函數的onClick
是onClick
與它調用的函數之間的綁定。該函數將只有一個參數以使onClick
正常工作。
OnClickListener
是任何類都可以實現的接口。由於它是任何類可以實現的接口,因此這更加靈活。
如果需要,您可以輕鬆地將一個偵聽器實現與另一個偵聽器實現交換。
OnClickListener
使您能夠從觸發事件的視圖中分離單擊事件的動作/行爲。雖然簡單的情況下,這不是什麼大不了的,複雜事件處理,這可能意味着該代碼
換句話說更好的可讀性和可維護性 -
XML onClick
有利於在Java一個固定的實現碼。 OnClickListener
適用於更復雜的代碼和多個按鈕。但就基本功能而言 - 它們都做同樣的事情。
添加OnClickListener這兩種方式有什麼不同嗎?哪一個被推薦?
不,他們沒有什麼兩樣,都將正常工作,但是從我的經驗,我不建議你使用一個簡單的原因XML佈局文件的XML onClick
的選擇,因爲他們的名字代表的佈局和代表創建你設計的視覺方面。
保留Java的一部分,將Java文件:)
我
我活動佈局我可以定義方法調用
<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
注意,使用的onClick方法應該在你的語境。在片段中這樣做,您將不得不在包含片段的活動中定義方法。你必須確保proguard不會刪除這些方法。 –