編輯:關於Android編程
1、引子
android中的回調最經典的就是點擊事件設置監聽(一般通過switch(v.getId()))這裡寫個最基本的
btn_rigister.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // TODO log in } });
public interface OnClickListener { /** * Called when a view has been clicked. * * @param v The view that was clicked. */ void onClick(View v); }
我們在用的時候實現具體方法寫了處理時,當前的Actvity是沒有對這個方法做任何操作,這個被充實之後的onClick方法被view回調處理!其中一段處理 比如
public boolean callOnClick() { ListenerInfo li = mListenerInfo; if (li != null && li.mOnClickListener != null) { li.mOnClickListener.onClick(this); return true; } return false; }具體可以閱讀View.java
2、什麼是回調
回調其實是一種雙向調用模式,也就說調用方在接口被調用時也會調用對方的接口,聽起來就很拗口,翻譯翻譯就是“實現了抽象類/接口 的實例實現了父類的提供的抽象方法,後,將該方法交還給父類來處理”,口訣念3遍,可以體會到其中的內涵了沒?
主要要弄清楚一點,實現方法交還給提供接口的父類處理!
3、為什麼要用回調
這裡體現了java面向對象的“萬事萬物皆為對象”,我們需要將普通物體的特性抽象出來,共性之中又有特性,每個不同的特性就需要交給特定的情況處理,通過暴露接口方法可以減少很多重復,代碼更加優雅。
比如view具有被點擊的通性,但是每個點擊又會產生不一樣的事件處理一樣,因此android對外暴露一個接口有個onClick方法,你需要處理啥你就寫啥,view只會調用這個方法,具體怎麼處理你已經自己為不同的點擊事件做了處理了。
4、如何寫
一個很好的小栗子
【定義接口】 在類中定義一個Interface, 並在接口中定義一個抽象方法
public interface Callback{ public abstract void work(); }【接口對象】在類中定義一個該接口的成員變量
private Callback mCallback;【設置對象】在類中定義一個公共方法,可以設置這個接口的對象,調用該方法給接口對象變量賦值
public void setCallback(Callback callback) { this.mCallback = callback; }
public void doWork() { mCallback.work(); }
完整代碼如下
public class Employee { /* * 定義回調接口的成員變量 */ private Callback mCallback; /* * 聲明回調接口 */ public interface Callback{ public abstract void work(); } /* * 設置回調接口對象成員變量 */ public void setCallback(Callback callback) { this.mCallback = callback; } /* * 調用回調接口對象中的方法 */ public void doWork() { mCallback.work(); } }
然後我們針對去使用就好
public class Boss { private Employee employee; /* * 為Employee設置回調函數, 在這裡定義具體的回調方法 */ public void setCallback() { employee.setCallback(new Employee.Callback() { @Override public void work() { System.out.println("work"); } }); } }
在上一篇文章講了Android的Toast拓展,在原生Toast基礎上對顯示時長和顯示動畫做了二次封裝,強化了Toast的部分功能。也分析了對於二次封裝的ExToast設
Appwidget就是手機應用中常常放在桌面(即home)上的一些應用程序,比如說鬧鐘等。這種應用程序的特點是它上面顯示的內容能夠根據系統內部的數據進行更新,不需要我們進
1.基本思路①.創建已加鎖應用的數據庫(字段:_id,packagename),如果應用已加鎖,將加鎖應用的包名維護到數據庫中②.已加鎖+未加鎖 == 手機中所有應用(A
把圖片緩存、手勢及OOM三個主題放在一起,是因為在Android應用開發過程中,這三個問題經常是聯系在一起的。首先,預覽大圖需要支持手勢縮放,旋轉,平移等操作;其次,圖片