基于监听的事件处理——直接绑定到标签
Android还有一种更简洁的绑定事件监听器的方式,直接在界面布局文件中为指定标签绑定事件处理方法。
对于很多Android界面组件标签而言,它们都支持onClick属性的属性值就是一个形如xxx(View source)的方法的方法名。
例如下面界面界面布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:gravity="center_horizontal" > <EditText android:id="@+id/show" android:layout_width="fill_parent" android:layout_height="wrap_content" android:editable="false" > </EditText> <Button android:id="@+id/bn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="clickHandler" android:text="点击我" /> </LinearLayout>
上面的程序中粗体字代码用于在界面布局文件中为Button按钮绑定一个事件处理方法:clickHandler,这就意味着开发者需要在该界面布局对应的Activity中定义一个void clickHandler(View source)方法,该方法将会负责处理该按钮上的单击事件。下面是该界面布局文件的Java代码。
package com.example.studyevent; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.widget.EditText; public class BindingTag extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_binding_tag); } //定义一个事件处理方法 //其中source参数代表事件源 public void clickHandler(View source) { EditText show=(EditText)findViewById(R.id.show); show.setText("bn按钮被点击了"); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.binding_tag, menu); return true; } }
上面的粗体字代码定义了一个clickHandler(View source)方法,当程序中的bn按钮被单击时,该方法将会被激发并处理bn按钮上的单击事件。
运行上面的程序将会看到如下效果: