源代码:
public class MainActivity extends Activity implements OnClickListener{
EditText inputContent;
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout. activity_main);
inputContent =
(EditText)findViewById(R.id.inputEditText);
Button type1 = (Button)findViewById(R.id. type1);
Button type2 = (Button)findViewById(R.id. type2);
Button type3 = (Button)findViewById(R.id. type3);
Button type4 =
(Button)findViewById(R.id.type4);
//第一种无名内部类的方式
type1.setOnClickListener( new OnClickListener()
{
@Override
public void onClick(View
arg0) {
// TODO Auto-generated
method stub
String content = inputContent.getText().toString();
showContent( "无名内部类的方式" ,
content);
}
});
//第二种实现OnClickListener接口方式
type2.setOnClickListener( new MyOnClickListener());
//第三种activity自己实现OnClickListener接口
type3.setOnClickListener( this);
}
private class MyOnClickListener implements OnClickListener{
@Override
public void onClick(View
arg0) {
// TODO Auto-generated
method stub
String content = inputContent.getText().toString();
showContent( "实现OnClickListener接口方式" ,
content);
}
}
@Override
public void onClick(View
arg0) {
// TODO Auto-generated
method stub
switch (arg0.getId())
{
case R.id.type3 :
String content = inputContent.getText().toString();
showContent( "activity实现OnClickListener接口方式" ,
content);
break;
default:
break;
}
}
//第四种布局文件绑定方法的方式
public void type4(View
arg0){
String content = inputContent.getText().toString();
showContent( "布局文件绑定方式的方式" ,
content);
}
/**
* 显示toast
* @param type
那种方式
* @param inputContent
输入内容
*/
public void showContent(String
type, String inputContent){
Toast.makeText(this,
type + " 输入内容:" + inputContent, Toast.LENGTH_LONG ).show();
}
}
布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<EditText
android:id="@+id/inputEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="32dp"
/>
<Button
android:id="@+id/type1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/inputEditText"
android:layout_below="@+id/inputEditText"
android:text="@string/type1" />
<Button
android:id="@+id/type2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/inputEditText"
android:layout_below="@+id/type1"
android:text="@string/type2" />
<Button
android:id="@+id/type3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/inputEditText"
android:layout_below="@+id/type2"
android:text="@string/type3" />
<Button
android:id="@+id/type4"
android:onClick="type4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/inputEditText"
android:layout_below="@+id/type3"
android:text="@string/type4" />
</RelativeLayout>
第一种方式:无名内部类实现OnClickListener接口
第二种方式:定义一个MyOnClickListener类,该类实现OnClickListener接口
第三种方式:activity实现OnClickListener接口
第四种方式:布局文件绑定一个activity的方法
在这四种方式中,前三种都是基于实现OnClickListener接口,再在按钮上绑定这个类的方式实现,涉及观察者模式。第四种方式通过布局文件绑定方法的方式,通过java反射机制实现的。总的来说这四种方式第三种方式是最好的,当在一个界面的涉及很多按钮时,可以统一在一个方法里面判断,绑定也相对简单(setOnClickListener( this)即可),对于第一方式,代码量比较多,比较分散,后期维护时必须找到响应代码修改,第二种方式在不同事件时,需要定义不同的类,也不利于维护,第四种方式同样的问题。