1. 程式人生 > >Android:View點選事件

Android:View點選事件

<1>建立內部類:

建立一個內部類實現OnClickListener介面並重寫onClick()方法,在方法中寫入點選事件的邏輯。

內部類寫完後需要為按鈕設定setOnClickListener(Listener listener)屬性,在引數中傳入之前建立好內部類物件即可,這樣當點選按鈕時就會自動觸發內部類中的onClick()方法呼叫事件邏輯。

這裡比較重要的一點,要為按鈕設定點選事件前要先獲取到該控制元件的引用,需要在佈局檔案中為按鈕設定id屬性,在程式碼中使用findViewById(R.id)方法得到該控制元件的View物件,最後通過強制型別轉換得到該控制元件,具體程式碼如下:

為控制元件設定id屬性:

<Button

     android:id=”@+id/button1”     //為控制元件設定id屬性

     …….

/>

得到控制元件引用,建立內部類實現OnClickListener介面:

protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button button1 = (Button) findViewById(R.id.button1);
    Button button2 = (Button) findViewById(R.id.button2);
    //傳入實現了onClickListener介面的類的物件
    button1.setOnClickListener(new MyButton());
    button2.setOnClickListener(new MyButton());
}
private class MyButton implements OnClickListener{
  @override
  public void onClick(View v){
        switch(v.getId()){
               case R.id.button:
                   log.i("定義屬性響應按鈕點選事件");
                   break;
               case R.id.button1:
                   log.i("定義屬性響應按鈕點選事件");
                   break;
        }
  }
}


使用這種點選事件的好處是,當按鈕較多時可以在onClick(View v)方法中使用switch語句case屬性設定各自不同的點選事件邏輯。

<2>主類中實現OnClickListener介面: 

在主類中實現OnClickListener介面,然後重寫onClick()方法,並通過switch語句判斷是哪個按鈕被點選,然後執行相應操作,具體程式碼如下:

public class MainActivity extends Activity implements OnClickListener{
       protected void onCreate(Bundle savedInstanceState){
                 super.onCreate(savedInstanceState);
                 setContentView(R.layout.activity_main);
                 Button button1 = (Button) findViewById(R.id.button1);
                 Button button2 = (Button) findViewById(R.id.button2);
                 //按鈕繫結介面
                 button1.setOnClickListener(this);
                 button2.setOnClickListener(this);
       }
       //在過載的方法中實現點選設定

       @override
        public void onClick(View v){
               switch(v.getId()){
                      case R.id.button:
                            log.i("定義屬性響應按鈕點選事件");
                            break;
                      case R.id.button1:
                            log.i("定義屬性響應按鈕點選事件");
                            break;
                }
       }
}


需要注意的是,button.setOnClickListener(this);方法中接收了一個引數this,這個this代表的是該Activity的引用。由於Activity實現了OnClickListener介面,所以在這裡this代表了OnClickListener的引用,在方法中傳入this就代表該控制元件綁定了點選事件的介面。

<3>匿名內部類:

當按鈕較少或者只有一個按鈕時,就不需要再單獨建立一個類實現OnClickListener介面了,可以直接建立OnClickListener的匿名內部類傳入按鈕的setOnClickListener()引數中,具體程式碼如下:

Button button1=(Button) findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener(){
      @override
      public void onClick(View v){
             log.i("定義屬性響應按鈕點選事假");
      }
});