基於監聽的事件處理
我們知道在Android中,事件處理模型包括事件、事件源、事件監聽器。事件就是用戶的操作了,比如說點擊、雙擊……。事件源是這個事件發生在什麼地方,比如我們點擊一個按鈕,那麼事件源就是這個按鈕。事件監聽器就是由哪個類或模塊來處理這個事件。
根據事件監聽器類在內部還是在外部,抑或是普通內部還是匿名內部,我們把事件監聽處理分成了以下5種,其中匿名內部類是我們最常用的。
1.普通內部類作爲事件監聽器類
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button1);
textView = (TextView) findViewById(R.id.textView1);
button.setOnClickListener(new MyClickListener());
}
class MyClickListener implements View.OnClickListener
{
@Override
public void onClick(View v) {
textView.setText("按鈕被單擊了");
}
}
2.匿名內部類作爲事件監聽器類
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button1);
textView = (TextView) findViewById(R.id.textView1);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
textView.setText("按鈕被單擊了");
}
});
3.Activity本身作爲事件監聽器類
由於要在Activity中實現onClick(View V)函數,所以Mainactivity要記得implements OnClickListener
public class MainActivity extends ActionBarActivity implements OnClickListener {
private Button button = null;
private TextView textView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button1);
textView = (TextView) findViewById(R.id.textView1);
button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
textView.setText("按鈕被單擊了");
}
4.外部類作爲事件監聽器類
MainActivity.java
button.setOnClickListener(new MyClickListener(textView));
MyClickListener.java
public class MyClickListener implements OnClickListener {
private TextView tv;
public MyClickListener(TextView textView){
this.tv = textView;
}
@Override
public void onClick(View v) {
tv.setText("按鈕被單擊了");
}
}
5.直接綁定到標籤
<Button
......
android:onClick="click"
android:text="Button" />
//MainActivity.java額外添加下面一個函數
public void click(View V){
textView.setText("按鈕被單擊了");
}
我們在應用中用到最多的應該是匿名內部類的形式吧!
基於回調的事件處理
回調機制與監聽機制都很好理解,在這裏需要注意的是基於回調的事件傳播。
紅色代表的是主Acitivity,黃色表示Activity上面的Button,白色表示Button上面綁定的事件。箭頭就像用戶觸摸手機屏幕而產生的事件。
從上圖中我們很容易知道,事件傳播的路徑是 onKeyListener->Button->Activity, 前提是回調函數的返回值都是false
這裏我剛上傳了李剛 瘋狂Android講義 中關於此內容的代碼,大家可以查看我的資源下載。