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
}

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

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

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

  2. 我认为xml方法的可维护性较差,因为它将"代码内容"(方法名)放在表示层中。解开在哪里设置了哪个处理程序需要细心的注释,而开发人员常常忘记添加注释。

  3. 类似于2,我相信这是更清楚地做字段分配(findViewById)和事件处理程序在同一地方,我然后有一个"视图初始化"区域。把它分散在不同的文件里对我来说就像折磨。使用视图/依赖注入会更好。

注:您不必将侦听器分配给字段,使用匿名类然后调用activity/fragment的单个方法会更简洁。

相关内容

最新更新