Android 程式開發:(九)使用者介面 —— 9.3 註冊事件監聽器

來源:互聯網
上載者:User

當使用者與視圖views進行互動的時候,views也會觸發事件。舉個例子,當使用者點擊了一個按鈕,你需要為這個事件服務,只有這樣,才能去執行某些適當的行為。如果想這麼做的話,你就需要為視圖views註冊監聽。

使用上一節中的例子,在activity中有兩個Button。我們可以使用一個匿名的類,為按鈕設定點擊事件。

[java]
package net.learn2develop.UIActivity; 
 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 
 
public class UIActivityActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
         
        //---the two buttons are wired to the same event handler--- 
        Button btn1 = (Button)findViewById(R.id.btn1); 
        btn1.setOnClickListener(btnListener); 
         
        Button btn2 = (Button)findViewById(R.id.btn2); 
        btn2.setOnClickListener(btnListener); 
    } 
     
    //---create an anonymous class to act as a button click listener--- 
    private OnClickListener btnListener = new OnClickListener() 
    { 
        public void onClick(View v) 
        { 
            Toast.makeText(getBaseContext(), 
                    ((Button) v).getText() + " was clicked", 
                    Toast.LENGTH_LONG).show(); 
        } 
    }; 
     
    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) 
    { 
        switch (keyCode) 
        { 
            case KeyEvent.KEYCODE_DPAD_CENTER: 
                Toast.makeText(getBaseContext(), 
                        "Center was clicked", 
                        Toast.LENGTH_LONG).show(); 
                break;                 
            case KeyEvent.KEYCODE_DPAD_LEFT: 
                Toast.makeText(getBaseContext(), 
                        "Left arrow was clicked", 
                        Toast.LENGTH_LONG).show(); 
                break;                 
            case KeyEvent.KEYCODE_DPAD_RIGHT: 
                Toast.makeText(getBaseContext(), 
                        "Right arrow was clicked", 
                        Toast.LENGTH_LONG).show(); 
                break;                 
            case KeyEvent.KEYCODE_DPAD_UP: 
                Toast.makeText(getBaseContext(), 
                        "Up arrow was clicked", 
                        Toast.LENGTH_LONG).show(); 
                break; 
            case KeyEvent.KEYCODE_DPAD_DOWN: 
                Toast.makeText(getBaseContext(), 
                        "Down arrow was clicked", 
                        Toast.LENGTH_LONG).show(); 
                break;                 
        } 
        return false; 
    } 
 

如果你點擊了OK按鈕或Cancel按鈕,對應的訊息就會出現在螢幕上,這也就說明了,適當的事件被出發了。


除了定義一個匿名類,也可以定一個匿名內部類去處理事件。下面的例子展示如何處理EditText的onFocusChange()方法。

[java] 
//---create an anonymous inner class to act as an onfocus listener--- 
EditText txt1 = (EditText)findViewById(R.id.txt1); 
txt1.setOnFocusChangeListener(new View.OnFocusChangeListener() 

    @Override 
    public void onFocusChange(View v, boolean hasFocus) { 
        Toast.makeText(getBaseContext(), 
            ((EditText) v).getId() + " has focus - " + hasFocus, 
            Toast.LENGTH_LONG).show(); 
    } 
}); 
當EditText擷取焦點,螢幕上就會列印出一行訊息。


也可以使用匿名內部類,為兩個Button設定監聽。

[java]
      //---the two buttons are wired to the same event handler--- 
      Button btn1 = (Button)findViewById(R.id.btn1); 
      //btn1.setOnClickListener(btnListener); 
      btn1.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
        //---do something--- 
    } 
});         
 
      Button btn2 = (Button)findViewById(R.id.btn2); 
      //btn2.setOnClickListener(btnListener); 
      btn2.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
        //---do something--- 
    } 
}); 

那麼,到底該使用哪種方法去為視圖設定監聽呢?當你需要使用一個監聽器去為多個視圖服務的時候,匿名類就很有用處了。如果你只需要為單一的視圖設定監聽,那麼就使用匿名內部類吧。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.