要注册OnClickListener
,我总是在setOnClickListener(listener)
上致电Button
。现在,我已经看到了一段代码,其中使用android:onclick="nameOfMethod"
在布局中定义了click事件,并使用View
参数实现该方法。
这两种添加OnClickListener
的方式有什么不同吗?推荐哪一个?
答案 0 :(得分:8)
带有XML绑定功能的onClick
是onClick
与其调用的函数之间的绑定。该函数只有一个参数,以便onClick
起作用。
OnClickListener
是任何类都可以实现的接口。由于它是任何类都可以实现的接口,因此更灵活。
如果需要,您可以轻松地将一个侦听器实现与另一个实现交换。
使用OnClickListener
可以将click事件的动作/行为与触发事件的View分开。虽然对于简单的情况,这对于复杂的事件处理来说并不是一件大事,但这可能意味着更好的可读性和代码的可维护性
换句话说 -
XML onClick
适用于Java代码中的一个固定实现。
OnClickListener
更适合更复杂的代码和多个按钮。但至于基本功能 - 它们都完全相同。
答案 1 :(得分:1)
这两种添加OnClickListener的方法有什么不同吗?推荐哪一个?
不,它们没有区别并且两者都有效,但根据我的经验,我不建议您使用xml onClick
选项,原因很简单,创建xml布局文件作为其名称来表示布局和表示你所设计的视觉方面。
将java部分留给java文件:)
答案 2 :(得分: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() {
在片段中使用该布局时。
mSearchHotWordsLabel
还存在与proguard相关的问题
见android:onClick not working with ProGuard