第21節 - Android: onClick事件的5種實現方式
這一節我會介紹Android onClick事件的5種實現方式。當我們明白onClick事件的5種實現方式,我們就可以進入下一節(第22節 - LibGDX: Game Menu Screen),因為在Game Menu Screen內我們須要用到"Click" Button選擇不同按鈕,如下圖:
Android onClick事件有5種實現方式,第1種最簡單,它是Android預設的onClick事件實現方式,不須要用到View物件的setOnClickListener()方法(例如: button.setOnClickListener())。
注意1,因為第1種方式是Android預設的,不能用在LibGDX程式上,LibGDX必須用第2至5種的方式。
注意2,因為第1種方式是Android預設的,不須用View物件的setOnClickListener()方法,但第2至5種方式就須要用到View物件的setOnClickListener()方法,我會在這一節詳細介紹。
以下列出Android onClick事件的5種實現方式:
- 方式1 - Android Default onClick Events。
- 方式2 - Activity Implements OnClickListener Interface。
- 方式3 - Member Class(Inner Class) Implements OnClickListener Interface。
- 方式4 - Interface Type。
- 方式5 - Anonymous Inner Class。
方式1 - Android Default onClick Events
以下是第1種方式,它是Android預設的onClick事件實現方式,不須要用到View物件的setOnClickListener()方法(例如: button.setOnClickListener()),只要在Button的屬性欄設定它的Android:On Click=XXX。
注意XXX代表主程式(例如: MainActivity.java)內的onClick方法名字,我會用Android:On Click=action做例子。
- 首先在activity_main.xml內建立一個Button物件,在屬性欄設定它的id=button1和On Click=action。
再建立一個TextView物件,在屬性欄設定它的id=textView1。 - 在MainActivity.java內建立action()方法,在action()方法內我們用findViewById()方法把activity_main.xml的textView1連接到MainActivity.java的textView。
最後用setText()方法把textView顯示的字串改為"Good Day!!"。
以下是實物例子:
- 首先在activity_main.xml內建立一個Button物件,在屬性欄設定它的id=button1。
再建立一個TextView物件,在屬性欄設定它的id=textView1。 - 在Button物件的屬性欄設定它的On Click=action。
在MainActivity.java內建立action()方法,在action()方法內我們用findViewById()方法把activity_main.xml的textView1連接到MainActivity.java的textView。 - 在onCreate()方法內預設第1個顯示畫面是"activity_main",則是以上的activity_main.xml。
再建立一個TextView物件,在屬性欄設定它的id=textView1。 - 當我們按"Button"按鈕,就會啟動action()方法,textView1顯示的字串就會改為"Good Day!!"。
方式2 - Activity Implements OnClickListener Interface
以下是第2種方式,這個方式會用到OnClickListener介面。
注意1,因為這方式不是Android預設的,我們不須要在Button物件的屬性欄設定Android:On Click=action。
注意2,因為這方式不是Android預設的,我們須要用到View物件的setOnClickListener()方法。
- 首先在activity_main.xml內建立一個Button物件,在屬性欄設定它的id=button1。
再建立一個TextView物件,在屬性欄設定它的id=textView1。 - 在MainActivity.java內實作OnClickListener介面。
- 在onCreate()方法內我們用findViewById()方法把activity_main.xml的button1連接到MainActivity.java的button和textView1連接到MainActivity.java的textView。
再設定button的監聽動作(button.setOnClickListener(this);),在這例子裡當Mouse按下按鈕時,button元件就會啟動onClick()方法。
注意,Keyword "this"相等於這個類別的物件。"this"=MainActivity類別的物件=ActionBarActivity類別物件=OnClickListener介面物件。因為MainActivity類別繼承ActionBarActivity,也實作了OnClickListener介面,所以"this"就可作ActionBarActivity或OnClickListener的物件用。
我也在第17節 - LibGDX: Splash Screen介紹過Keyword "this"。 - 最後在onClick()方法內用setText()方法把textView顯示的字串改為"Good Day!!"。
以下是實物例子:
- 首先在activity_main.xml內建立一個Button物件,在屬性欄設定它的id=button1。
- 再建立一個TextView物件,在屬性欄設定它的id=textView1。
- 在onCreate()方法內我們用findViewById()方法把activity_main.xml的textView1連接到MainActivity.java的textView。
- 再用findViewById()方法把activity_main.xml的button1連接到MainActivity.java的button。
- 再設定button的監聽動作(button.setOnClickListener(this);)。
- 在onCreate()方法內預設第1個顯示畫面是"activity_main",則是以上的activity_main.xml。
- 當Mouse按下按鈕時,button元件就會啟動onClick()方法,textView1顯示的字串就會改為"Good Day!!"。
方式3 - Member Class(Inner Class) Implements OnClickListener Interface
以下是第3種方式,這個方式也須要用到OnClickListener介面,不過這次不是用在MainActivity類別內,而是用在Inner Class內。
- 首先在activity_main.xml內建立一個Button物件,在屬性欄設定它的id=button1。
再建立一個TextView物件,在屬性欄設定它的id=textView1。 - 在MainActivity.java內建立一個action物件。
- 在onCreate()方法內我們用findViewById()方法把activity_main.xml的button1連接到MainActivity.java的button和textView1連接到MainActivity.java的textView。
再設定button的監聽動作(button.setOnClickListener(action);),在這例子裡當Mouse按下按鈕時,button元件就會啟動action內的onClick()方法。
注意,這次不須用Keyword "this",因為我們建立了Action Inner Class,所以button.setOnClickListener()傳入action物件。 - 最後建立了Action Inner Class,再實作OnClickListener介面,在onClick()方法內用setText()方法把textView顯示的字串改為"Good Day!!"。
以下是實物例子:
- 首先在activity_main.xml內建立一個Button物件,在屬性欄設定它的id=button1。
- 再建立一個TextView物件,在屬性欄設定它的id=textView1。
- 在onCreate()方法內我們用findViewById()方法把activity_main.xml的textView1連接到MainActivity.java的textView。
- 再用findViewById()方法把activity_main.xml的button1連接到MainActivity.java的button。
- 再設定button的監聽動作(button.setOnClickListener(action);)。
- 在onCreate()方法內預設第1個顯示畫面是"activity_main",則是以上的activity_main.xml。
- 當Mouse按下按鈕時,button元件就會啟動onClick()方法,textView1顯示的字串就會改為"Good Day!!"。
方式4 - Interface Type
以下是第4種方式,這個方式也須要用到OnClickListener介面,不過這次不是用在MainActivity類別內,也不是用在Inner Class內,而是用在介面(Interface)物件內。
- 首先在activity_main.xml內建立一個Button物件,在屬性欄設定它的id=button1。
再建立一個TextView物件,在屬性欄設定它的id=textView1。 - 在MainActivity.java內建立一個介面(Interface)物件action。
- 在onCreate()方法內我們用findViewById()方法把activity_main.xml的button1連接到MainActivity.java的button和textView1連接到MainActivity.java的textView。
再設定button的監聽動作(button.setOnClickListener(action);),在這例子裡當Mouse按下按鈕時,button元件就會啟動action內的onClick()方法。
注意1,這次也不須用Keyword "this",因為我們建立介面(Interface)物件action,所以button.setOnClickListener()傳入action物件。
注意2,這次action是介面(Interface)物件,而不是第3種方式的Inner Class物件。 - 最後建立了Action Inner Class,再實作OnClickListener介面,在onClick()方法內用setText()方法把textView顯示的字串改為"Good Day!!"。
以下是實物例子:
- 首先在activity_main.xml內建立一個Button物件,在屬性欄設定它的id=button1。
- 再建立一個TextView物件,在屬性欄設定它的id=textView1。
- 在onCreate()方法內我們用findViewById()方法把activity_main.xml的textView1連接到MainActivity.java的textView。
- 再用findViewById()方法把activity_main.xml的button1連接到MainActivity.java的button。
- 再設定button的監聽動作(button.setOnClickListener(action);)。
- 在onCreate()方法內預設第1個顯示畫面是"activity_main",則是以上的activity_main.xml。
- 當Mouse按下按鈕時,button元件就會啟動onClick()方法,textView1顯示的字串就會改為"Good Day!!"。
方式5 - Anonymous Inner Class
以下是第5種方式,這個方式其實與第4種方式相同,他是第4種方式的簡化版,它把介面(Interface)物件action刪除,所以叫做Anonymous(匿名)。
注意,這個方式也須要用到OnClickListener介面,和第4種方式一樣,OnClickListener介面不是用在MainActivity類別內,也不是用在Inner Class內,而是用在介面(Interface)物件內。
- 首先在activity_main.xml內建立一個Button物件,在屬性欄設定它的id=button1。
再建立一個TextView物件,在屬性欄設定它的id=textView1。 - 在onCreate()方法內我們用findViewById()方法把activity_main.xml的button1連接到MainActivity.java的button和textView1連接到MainActivity.java的textView。
再設定button的監聽動作(button.setOnClickListener(XXX);),在這例子裡當Mouse按下按鈕時,button元件就會啟動onClick()方法。
注意,XXX就是第4種方式內的介面(Interface)物件action,因為action只會用一次,傳入button.setOnClickListener()後,就沒有用,所以很多時也會省略,所以叫做Anonymous(匿名)。 - 最後建立了Action Inner Class,再實作OnClickListener介面,在onClick()方法內用setText()方法把textView顯示的字串改為"Good Day!!"。
以下是實物例子:
- 首先在activity_main.xml內建立一個Button物件,在屬性欄設定它的id=button1。
- 再建立一個TextView物件,在屬性欄設定它的id=textView1。
- 在onCreate()方法內我們用findViewById()方法把activity_main.xml的textView1連接到MainActivity.java的textView。
- 再用findViewById()方法把activity_main.xml的button1連接到MainActivity.java的button。
- 再設定button的監聽動作(button.setOnClickListener(XXX);)。
注意,XXX就是第4種方式內的介面(Interface)物件action,因為action只會用一次,傳入button.setOnClickListener()後,就沒有用,所以很多時也會省略,所以叫做Anonymous(匿名)。 - 在onCreate()方法內預設第1個顯示畫面是"activity_main",則是以上的activity_main.xml。
- 當Mouse按下按鈕時,button元件就會啟動onClick()方法,textView1顯示的字串就會改為"Good Day!!"。