1

如果我想在单击按钮时发生某些事情,这两种方法有什么区别?第一个似乎要简单得多。

在布局中

<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
}

或者

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);
}
4

1 回答 1

1

这个问题有几个部分:性能、可维护性和个人偏好。

  1. 性能:使用 xml 方法会带来性能损失,因为框架必须使用反射来调用您的类的方法。姜饼及以上应该没问题(更好的 jit),但在此之前差异很明显。

  2. 我认为 xml 方法的可维护性较差,因为它将“代码事物”(方法名称)放在表示层中。解开哪个处理程序设置在哪里需要勤奋的评论,开发人员经常忘记添加。

  3. 与 2 类似,我相信在同一个地方进行字段分配 (findViewById) 和事件处理程序会更清晰,因为我有一个“视图初始化”区域。将它跨文件拆分对我来说就像是一种折磨。使用视图/依赖注入甚至更好。

PS您不必将侦听器分配给字段,使用匿名类然后调用活动/片段的单个方法会更干净。

于 2013-05-26T23:01:35.467 回答