編輯:關於Android編程
Android 回調
前言:
Android中的回調最經典的就是點擊事件設置監聽(一般通過switch(v.getId()))這裡寫個最基本的
btn_rigister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// TODO log in
}
});
view對外暴露了一個接口onClick
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();
}
ok,
完整代碼如下
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——滑動屏幕監聽+ Palette獲取圖片中的顏色+Toolbar-ActionBar
Android——滑動屏幕監聽+ Palette獲取圖片中的顏色 滑動屏幕監聽——音量+亮度的調整package
Android開發之TextView高級應用
Android開發之TextView高級應用 我們平時使用TextView往往讓它作為一個顯示文字的容器,但TextView的功能並不局限於此。下面就和大家分享一
android Context深度剖析
android程序和java程序的區別Android程序不像Java程序一樣,隨便創建一個類,寫個main()方法就能跑了,而是要有一個完整的Android工程環境,在這
Android安卓開發環境搭建教程
隨著手機用戶的增多,安卓手機軟件市場越來越火爆了。作為程序員,現在安卓編程是一項很火的工作,手游、軟件、系統的很多。 下面小編給學習安卓編程的朋