我这里主要是采用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所需要的数据传递过去。