標籤:
想要徹底理解安卓中用的回調,最好的辦法是自己寫一個類似的實現安卓中回調功能的實現方法。
我自己寫了一個可以實現setOnClickListener回調的工程:
具體目錄:
工程源碼的具體地址:http://pan.baidu.com/s/1c0hWPkk ,
View.java:類比的是Android中的View控制項,
1 package com.wyl.component; 2 3 import com.wyl.IntP.OnClickListener; 4 5 public class View { 6 public OnClickListener listener; 7 public String type; 8 9 /**10 * 兩個參數的構造器11 * @param listener12 * @param type13 */14 public View(OnClickListener listener, String type) {15 super();16 // this.listener = listener;17 this.type = type;18 }19 20 public View(String type) {21 super();22 this.type = type;23 }24 25 /**26 * 一個參數的構造器27 * 28 * @param listener29 * 傳入的對象為一個介面,30 */31 public View(OnClickListener listener) {32 super();33 this.listener = listener;34 }35 36 public OnClickListener getListener() {37 return listener;38 }39 /**40 * 這個方法尤其重要,41 * @param listener42 */43 public void setListener(OnClickListener listener) {44 this.listener = listener;45 }46 47 public String getType() {48 return type;49 }50 51 public void setType(String type) {52 this.type = type;53 }54 55 /**56 * Click()方法類比button的點擊事件,一點擊就會觸發介面的OnClick()方法57 */58 public void Click() {59 if (listener != null) {60 /*61 * 只有View對象(控制項對象,比如button等)的成員變數listener不為空白的時候62 * 回調listener介面對象的OnClick方法,這個方法的入參恰恰是View類型的變數63 */64 listener.Onclick(this);65 } else {66 //如果View對象(控制項對象,比如button等)的成員變數listener為空白,那麼捕獲,否則會報錯67 System.out.println("要先註冊listener....");68 return;69 }70 }71 }
OnClickListener.java,是一個介面,
1 package com.wyl.IntP; 2 3 import com.wyl.component.View; 4 /** 5 * 類比Android中的OnClickListener介面, 6 * 這個介面中只有一個OnClick()方法, 7 * @author Administrator 8 * 9 */10 public interface OnClickListener {11 public void Onclick(View view);12 }
測試類別:
1 package com.wyl.test; 2 3 import com.wyl.IntP.OnClickListener; 4 import com.wyl.component.View; 5 6 public class TestClick { 7 public static void main(String[] args) { 8 View v1 = new View("ListView"); 9 v1.setListener(new OnClickListener() {10 11 @Override12 public void Onclick(View view) {13 // TODO Auto-generated method stub14 System.out.println("v1控制項的類型是:" + view.getType());15 }16 });17 v1.Click();//Click()相當於Android中點擊一個button的時候觸發的事件,類比點擊事件18 }19 }
運行結果:
v1控制項的類型是:ListView
Android的回調類比