2014-03-04 40 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

相关问题