Android按钮事件的几种写法
本文对几种常用的Android按钮点击事件进行简单的汇总说明:
首先,我们定义一个简单的按钮布局:
<Button
android:id="@+id/btn_a"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="btn_b"/>
<Button
android:id="@+id/btn_b"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="btn_b"/>
在代码中我们可以有如下四种方法定义按钮的点击事件:
1、匿名内部类
public class ButtonActivity extends Activity {
Button btn_a, btn_b;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_button);
//首先定义两个按钮
btn_a= (Button) findViewById(R.id.btn_a);
btn_b= (Button) findViewById(R.id.btn_b);
//然后用匿名内部类的方式写点击事件
btn_a.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(ButtonActivity.this, "btn_a clicked !", Toast.LENGTH_SHORT).show();
}
});
btn_b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(TestButtonActivity.this, "btn_b clicked !", Toast.LENGTH_SHORT).show();
}
});
}
//-----end of all codes-----
}
2、继承OnClickListener来自定义单击事件
public class ButtonActivity extends Activity {
Button btn_a, btn_b;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_button);
//首先定义两个按钮
btn_a= (Button) findViewById(R.id.btn_a);
btn_b= (Button) findViewById(R.id.btn_b);
//然后用匿名内部类的方式写点击事件
btn_a.setOnClickListener(new myOnClick());
btn_b.setOnClickListener(new myOnClick());
}
//继承OnClickListener
class myOnClick implements OnClickListener{
@Override
public void onClick(View v)
{
switch (v.getId()) {
case R.id.btn_a:
Toast.makeText(ButtonActivity.this, "btn_a clicked!", Toast.LENGTH_SHORT).show();
break;
case R.id.button2:
Toast.makeText(ButtonActivity.this, "btn_b clicked !", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
}
//-----end of all codes-----
}
3、通过重写Click来自定义单击事件
public class ButtonActivity extends Activity {
Button btn_a, btn_b;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_button);
//首先定义两个按钮
btn_a= (Button) findViewById(R.id.btn_a);
btn_b= (Button) findViewById(R.id.btn_b);
//然后用匿名内部类的方式写点击事件
btn_a.setOnClickListener(this);
btn_b.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_a:
Toast.makeText(ButtonActivity.this, "btn_a clicked!", Toast.LENGTH_SHORT).show();
break;
case R.id.btn_b:
Toast.makeText(ButtonActivity.this, "btn_b clicked!", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
//-----end of all codes-----
}
4、在xml文件中定义按钮的单击事件
<Button
android:id="@+id/btn_a"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="btn_b"
android:onClick="onClick"/>
<Button
android:id="@+id/btn_b"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="btn_b"
android:onClick="onClick"/>
public class ButtonActivity extends Activity {
Button btn_a, btn_b;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_button);
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_a:
Toast.makeText(ButtonActivity.this, "btn_a clicked!", Toast.LENGTH_SHORT).show();
break;
case R.id.btn_b:
Toast.makeText(ButtonActivity.this, "btn_b clicked!", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
//-----end of all codes-----
}
以上四种按钮单击事件中,第一种最为常见,在界面按钮较少或者程序较为简单的时候,用匿名内部类的方法可以比较快速的完成点击事件处理,而当按钮非常多的时候,匿名内部类会导致你的代码非常冗余;第二种及第三种方法能够较好的将控件定义和事件处理进行分离,有较好的可读性、可维护性;第四种直接写在布局文件中的方法从代码量来说是最少的,但带来的问题就是程序的可读性大大下降,因为事件处理的函数并没有在.java文件中进行调用,不知道的人可能会比较迷糊,而且从界面上进行函数跳转查看也不是一种非常简单的方法吧~