在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();
}
這四種方法較爲常用,其他的如外部類作爲監聽器等由於本人沒使用過,不是很熟悉,在這裏就不作介紹。
網上關於監聽器的總結也有很多,本文也是在筆者的學習之後寫的,難免會有很多大牛的文章的影子,如有不當之處,請指出。謝謝。