編輯:關於android開發
好吧,首先我們來解釋一下什麼“點擊事件”,所謂“點擊事件”就是當我們點擊(注意是單擊)手機屏幕時,系統做出相應的響應;舉個例子哈,你去朋友家裡,要告訴你的朋友你到了,你是不是要敲一敲門,然後你朋友聽到了就來給你開門了,這個就和我們點擊屏幕上的Button很類似,點擊的操作相當於敲門,至於“朋友聽到”和“開門”這兩個行為動作,就是我們今天要探討的內容了。
手機沒有耳朵,不可能“聽到”我們點擊了屏幕,因此,需要給Button綁定一個監聽器,每當Button被點擊了,就去執行某些特定的操作,常用的點擊事件的實現方式有四種。
一、布局中綁定onClick屬性
上一篇文章大家也接觸到了,在Button這個控件裡面,設置“android:onClick”屬性
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="showToast" android:text="CLICK ME!"/>
“onClick”的值將對應載入這個布局的Activity中方法,也就是說如果“android:onClick=“xxx””的話,那麼,在HelloWorldActivity裡的方法就應該為
public void xxx(View view){ //Do what you want to do here. }
當我們點擊Button的時候,就會去執行xxx方法裡的代碼
二、實現OnClickListener接口
OnClickListener是一個接口,通過implements來onClick這個接口,在onClick這方法裡面就可以實現自己的操作了
package com.example.lushengduan.helloworld; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; /** * Created by Lushengduan on 2016/3/4. */ public class HelloWorldActivity extends Activity implements OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); } @Override public void onClick(View v) { //Do what you want to do here. } }
看到這裡大家會不會有個問題,這個監聽器沒有明確指定監聽哪一個組件,那它是怎麼工作的呢?是這樣的,我們能通過v.getId()來標識不同的組件,現在為Button增加一個名為“button1”的id
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="showToast" android:id="@+id/button1" android:text="CLICK ME!"/>
那麼結合View類裡的getid就可以定位到我們點擊的Button這個控件,而不是其他地方了,代碼如下
@Override public void onClick(View v) { switch (v.getId()){ case R.id.button1: //To do someThing break; default: break; } }
三、內部類方式
Button類裡有個方法叫做“setOnClickListener”,這個方法的參數需要的是一個OnClickListener的對象,新建一個內部類實現OnClickListener的接口就行了,在這之前,我們需要通過findViewById的方式拿到Button對象
button = (Button) findViewById(R.id.button1);
為Button設置監聽器
button.setOnClickListener(new MyClickListener());
然後在onClick方法中執行你想要的操作,完整代碼如下
package com.example.lushengduan.helloworld; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; /** * Created by Lushengduan on 2016/3/4. */ public class HelloWorldActivity extends Activity { private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); button = (Button) findViewById(R.id.button1); button.setOnClickListener(new MyClickListener()); } private class MyClickListener implements OnClickListener{ @Override public void onClick(View v) { //Do what you what to do here. } } }
四、匿名內部類方式
能寫成內部類的,就可以寫成匿名內部類的方式,理解了上面的代碼後,那麼就很簡單,基本是java的基礎知識了,直接看代碼
package com.example.lushengduan.helloworld; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; /** * Created by Lushengduan on 2016/3/4. */ public class HelloWorldActivity extends Activity { private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); button = (Button) findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //Do what you want to do here. } }); } }
Android動態加載Activity原理 activity的啟動流程 加載一個Activity肯定不會像加載一般的類那樣,因為activity作為系統的組件有自己的
如何處理 android 方法總數超過 65536 . the number of method references in a .dex file exceed 64k
Android 如何有效的解決內存洩漏的問題,android洩漏前言:最近在研究Handler的知識,其中涉及到一個問題,如何避免Handler帶來的內存溢出問題。在網上
Android編程之客戶端通過socket與服務器通信的方法 Android編程之客戶端通過socket與服務器通信的方法 &n