Android事件處理

基於監聽的事件處理
我們知道在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講義 中關於此內容的代碼,大家可以查看我的資源下載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章