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("定義屬性響應按鈕點選事假");
}
});