在android应用中,Button的点击极为常见,使用频率非常的高。在事件点击事件时我们需要为Button绑定监听器。android在实现Button点击事件时提供了诸多方法,在这里就不一一列举,仅就几种常用的方法给予讨论。
一、匿名内部类作为事件监听器类。
有时候,当事件监听器只需使用一次时,此时使用匿名内部类作为事件监听器类是最合适的,实际上,这种监听器形式的使用确实是很广泛的。
public class MainActivity extends Activity {
private Button button = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.btn);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "使用匿名内部类做为监听器", 0).show();
}
});
}
二、内部类作为监听器
此方法是将事件监听器类定义成当前类的内部类。1、使用内部类可以在当前类中复用监听器类,因为监听器类是外部类的内部类,2、所以可以自由访问外部类的所有界面组件。这也是内部类的两个优势。简单地说是时间监听器可以在不同的控件上再用,且实现非常简单,只需加上一句button.setOnClickListener(new neibulei());即可,简单应用。
public class MainActivity extends Activity {
private Button button = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new neibulei());
}
private class neibulei implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "使用内部类做为监听器", 0).show();
}
}
三、Activity本身作为事件监听器
此种办法直接在Activity中定义事件处理器的方法。在Activity类实现了OnClickListener事件监听接口,从而可以在该Activity类中直接定义事件处理器方法:onClick(view v),当为某个组件添加该事件监听器对象时,直接使用this作为事件监听器对象即可。
public class MainActivity extends Activity implements OnClickListener {
private Button button = null;
private Button button1 = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
button1 = (Button) findViewById(R.id.button1);
button.setOnClickListener(MainActivity.this);
button1.setOnClickListener(MainActivity.this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.but:
Toast.makeText(this, "使用activity本身作为事件监听器", 0).show();
break;
case R.id.but1:
Toast.makeText(this, "使用activity本身作为事件监听器1", 0).show();
break;
default:
break;
}
}
}
四、直接绑定到标签
此方法是直接在布文件中为监听事件绑定标签,实现也更为简单,如
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="点击"
android:onClick="click"/>
之后在java文件中:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void click(View view){
Toast.makeText(MainActivity.this, "直接绑定到标签", 0).show();
}
这四种方法较为常用,其他的如外部类作为监听器等由于本人没使用过,不是很熟悉,在这里就不作介绍。