要注册一个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不会删除这些方法。 –