转自:http://www.eoeandroid.com/blog-548102-1689.html
关于Activity中继承OnclickListener的说明
在为组件添加监听事件时,传统的方法是在组件后面加上.setOnclickListener(View.OnClickListener).
但是这种方法很麻烦,因为每一个组件添加监听事件时都要写相同的代码,而且OnClick方法在下面重写,造成了代码的冗余。下面介绍一种优化代码的方法
1、在布局文件中把所有组件都定义好,每个组件都要加入相应的id
2、令Activity实现OnclickListener接口,并重写OnClick()方法
说明:这里让Activity实现OnClickListener接口之后,再把所有组件添加OnClickListener方法的对象都变成this,这样所有组件监听的对象都是当前的这个Activity
3、在OnCreate()方法之外单独写一个方法将所有的组件都获取到,如上面的initWidght()方法
4、在OnClick方法里,根据不同组件的id值,来添加不同的实现,因为所有的组件都是继承自View的,所以通过View.getId可以获取组件的id值,然后在分支语句里添加监听事件里要执行的代码。这样的方法优化了代码,相当于将多个组件的监听事件的代码通过让Activity继承OnClickListener之后,通过判断不同组件的id值集合到一个OnClick事件里写了。
5、因为所有组件都是View类的子类,所以在传统方法中,将组件获取之后在后面添加.setOnclickListener(View.OnClickListener).相当于调用了父类(View这个类)的OnClick方法,而通过让Activity继承OnclickListener方法之后,在Activity里重写onClick方法则可以将各个组件的监听事件的代码集合在一起
6、具体的例子请看代码,代码中共添加了五个按钮的事件监听
MainActivity的代码:
package com.hcbosion.activityimplementsonclicklistener;
import android.R.integer;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initWidght();//调用方法初始化各个组件
}
public void initWidght(){
findViewById(R.id.Btn1).setOnClickListener(this);//注意:这里监听事件的对象一定要设置为this
findViewById(R.id.Btn2).setOnClickListener(this);
findViewById(R.id.btn3).setOnClickListener(this);
findViewById(R.id.btn4).setOnClickListener(this);
}
@Override
public void onClick(View v) {
int ItemId = v.getId();//获取组件的id值
switch (ItemId) {
case R.id.Btn1: //根据不同的id值,为不同的组件添加不同的监听事件的实现代码
Toast.makeText(MainActivity.this, "你点击了Button1", Toast.LENGTH_SHORT).show();
break;
case R.id.Btn2:
Toast.makeText(MainActivity.this, "你点击了Button2", Toast.LENGTH_SHORT).show();
break;
case R.id.btn3:
Toast.makeText(MainActivity.this, "你点击了Button3", Toast.LENGTH_SHORT).show();
break;
case R.id.btn4:
Toast.makeText(MainActivity.this, "你点击了Button4", Toast.LENGTH_SHORT).show();
default:
break;
}
}
}
布局文件的代码,这里在一个LinearLayout布局中添加了一个TextView组件和四个Button组件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:layout_gravity="center_horizontal">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/textview1"
android:id="@+id/textView1"
android:layout_marginTop="20dip"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button1"
android:textSize="20dip"
android:id="@+id/Btn1"
android:layout_marginTop="20dip"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dip"
android:text="Button2"
android:id="@+id/Btn2"
android:layout_marginTop="20dip"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dip"
android:text="Button3"
android:id="@+id/btn3"
android:layout_marginTop="20dip"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dip"
android:text="Button4"
android:id="@+id/btn4"
android:layout_marginTop="20dip"/>
</LinearLayout>