基于监听的事件处理——匿名内部类作为事件监听器类
大部分时候,事件处理器都没有什么复用价值(可复用的代码通常都被抽象成了业务逻辑方法),因此大部分事件监听器只是临时使用一次,所以使用匿名内部类形式的事件监听器更合适。实际上,这种形式是目前最广泛的事件监听器形式。下面的程序使用匿名内部类来创建事件监听器。
下面的程序示范匿名内部类作为事件监听器类
该实例的界面布局文件如下:
<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:text="点击我" /> </LinearLayout>
该Activity的后台代码如下:
package com.example.studyevent; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class AnonymousListener extends Activity { EditText show; Button bn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_anonymous_listener); show=(EditText)findViewById(R.id.show); bn=(Button)findViewById(R.id.bn); //直接使用Activity作为事件监听器 bn.setOnClickListener(new OnClickListener(){ //实现事件处理方法 @Override public void onClick(View v) { // TODO Auto-generated method stub 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.anonymous_listener, menu); return true; } }
上面的程序中粗体字部分使用匿名内部类创建了一个事件监听器对象,“new 监听器接口”或“new 事件适配器”的形式就是用于创建匿名内部类形式的事件监听器。
运行上面的程序将看到如下效果: