按钮setOnClickListener()vs android:onclick

时间:2014-03-04 12:50:44

标签: android button

要注册OnClickListener,我总是在setOnClickListener(listener)上致电Button。现在,我已经看到了一段代码,其中使用android:onclick="nameOfMethod"在布局中定义了click事件,并使用View参数实现该方法。

这两种添加OnClickListener的方式有什么不同吗?推荐哪一个?

3 个答案:

答案 0 :(得分:8)

带有XML绑定功能的onClickonClick与其调用的函数之间的绑定。该函数只有一个参数,以便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