android對監聽事件的處理可以分為4種
第一種:内部類作為事件監聽器類
内部類有兩種:分别為匿名内部類和不匿名内部類,其中大部分事件監聽類都是使用匿名内部類。
其中的好處有:1.可以在目前類中複用該監聽器類
2.可以自由通路外部類的所有界面元件
代碼
b1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intet = new Intent(MainActivity.this,seekbar.class);
startActivity(intet);
//finish();
}
});
第二種:外部類作為事件監聽器類
比較少見,其中優點為:
1.當某個事件監聽器被多個GUI界面共享,且主要是完成某種業務邏輯的實作
其中确定為:
1.不利于提高程式的内聚性
2.不能自由通路建立GUI界面類的元件,程式設計不夠簡潔
定義外部類代碼
public class sd implements OnClickListener{
public sd(){
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//定義處理
}
調用外部類
b1.setOnClickListener(new sd()});
第三種:Activity本身作為事件監聽器
可以直接在Activity中定義事件處理方法
其中優點為:非常簡潔
缺點為:
1.這種形式可能造成程式結構混亂。Activity的主要職責應該是完成界面初始化;但此時還需包含事件處理器方法,進而引起混亂
2.如果activity界面類需要實作監聽器接口,讓人感覺比較怪異。
代碼為:
public class ActivityListener extends Activity implements OnClickListener {
EditText show;
Button bn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
show = (EditText)findViewById(R.id.show);
bn = (Button)findViewById(R.id.bn);
bn.setOnClickListener(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.activity_listener, menu);
return true;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
show.setText("按鈕被單擊了!");
}
}
第四種:直接綁定到标簽
在布局中要發送事件源中定義一個:
android:onClick="clickHandler"
然後在該布局對應的Activity定義一個 void clickHandler(void source)方法