2013-05-26 83 views
1

如果我想单击按钮时发生某些事情,两种方法的区别是什么?第一个看起来简单得多。Android事件处理方法

在布局

<Button xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/button_send" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="@string/button_send" 
android:onClick="sendMessage" /> 

在活动

public void sendMessage(View v) { 
// do whatever 
} 

OR

private OnClickListener listener = new OnClickListener() { 
    public void onClick(View v) { 
    // do whatever 
    } 
}; 

protected void onCreate(Bundle savedValues) { 
    // Capture our button from layout 
    Button button = (Button)findViewById(R.id.mybutton); 
    // Register the onClick listener with the implementation above 
    button.setOnClickListener(listener); 
} 
+0

看看这个问题和答案:http://stackoverflow.com/questions/4153517/how-exactly-does-the-androidonclick-xml-attribute-differ-from-setonclicklistene – jenzz

回答

2

有几个部分这样的问题:性能,可维护性和个人喜好。

  1. 性能:由于框架必须使用反射来调用类的方法,所以使用xml方法会造成性能损失。姜饼和以上应该罚款(更好的JIT),但在此之前差异是显而易见的。

  2. 我相信xml方法不易维护,因为它在表示层中放置了“代码事物”(方法名称)。解开哪个处理程序需要勤奋的评论,哪些开发人员经常忘记添加。

  3. 与2相似,我相信这是更清晰的做字段分配(findViewById)和事件处理程序在同一个地方,然后我有一个“视图初始化”区域。将它跨越档案感觉就像对我施以酷刑。使用视图/依赖注入甚至更好。

P.S.您不必将侦听器分配给字段,使用匿名类可以更简洁,然后调用您的活动/片段的单一方法。