我這裏主要是採用Fragment和Fragment或是Activity之間的通信來舉例子如何使用回調。當然,還有其他多種方式,如EventBus等。
舉例一:
Activity需要在Fragment數據加載成功之後,顯示某個控件。
步驟:
1.單獨定義一個接口:
public interface CallBack {
void updateView(boolean isSuccess);
}
2 .在Activity中 implements CallBack 。重寫updateView:
@Override
public void updateView(boolean isSuccess) {
//根據isSuccess,activity做相應邏輯
}
3.在Fragment中拿到Activity的引用,在獲取數據成功之後,調用Activity的updateView方法
mCallBack = (CallBack) getActivity();
if (entity.isSuccess()) {
mCallBack.updateView(true);
}else{
mCallBack.updateView(false);
}
舉例二:
如果一個例子不夠,那就再來一個吧。
一個Activity中有Fragment A 和Fragment B, 如何將A中的數據傳遞給B呢?方法有多種,我們再次用回調來做。
- 在A中定義一個Listener:
public interface OnGetDataCompletedListener {
void onGetDataCompleted(Entry entry);
}
public void setOnGetDataCompletedListener(OnGetDataCompletedListener mListener) {
this.mListener = mListener;
}
2.在需要將數據傳遞出去的業務邏輯處調用
if(mListener!=null){
mListener.onGetDataCompleted(entity);
}
3.Activity中能夠拿到Fragment A的引用
A.setOnGetDataCompletedListener(new A.OnGetDataCompletedListener() {
@Override
public void onGetDataCompleted(Entry entry) {
B.setViewData(entry);
}
});
4.B中提供setViewData()方法,更新自己的邏輯:
public void setViewData(Entry entry) {
// todo
}
這個過程就是:A將數據傳遞給Activity, Activity再調用B中的方法,將B所需要的數據傳遞過去。