如何使用 MVP 模式将数据从片段发送回活动



我一直在为如何做到这一点而苦苦挣扎了很多小时......所以我有一个创建片段的活动。

mAddCommentButton.setOnClickListener((View v) ->{
BottomSheetAddComment bottomSheetAddComment = new BottomSheetAddComment();
bottomSheetAddComment.show(getSupportFragmentManager(), null);
});

在该片段中,它进行了网络调用,我想将该网络调用的结果发送回活动的演示者,但我似乎不明白该怎么做......

private void makeNetworkCall(Comment comment){
RetrofitInterfaces.IPostNewComment service = RetrofitClientInstance.getRetrofitInstance().create(RetrofitInterfaces.IPostNewComment.class);
Call<EventCommentsDao> call = service.listRepos(comment);
call.enqueue(new Callback<EventCommentsDao>() {
@Override
public void onResponse(Call<EventCommentsDao> call, Response<EventCommentsDao> response) {
// Send response back to Activity Presenter
}
@Override
public void onFailure(Call<EventCommentsDao> call, Throwable t) {
}
});
}

主持人:

public class EventPresenter implements EventContract.Presenter{
private EventContract.View eventView;
private EventContract.Model eventModel;
public EventPresenter(EventContract.View eventView) {
this.eventView = eventView;
eventModel = new EventModel();
}
@Override
public void onDestroy() {
this.eventView = null;
}
@Override
public void requestDataFromServer() {
if(eventView != null){
eventView.hideProgress();
}
eventModel.getEventInfo(this);
}

}

如何获取对活动演示者的引用,以便将结果发回?

在活动中添加一个方法以返回事件演示者:

public EventPresenter getPresenter() {
return this.eventPresenter;
}

在你的片段中:

private void makeNetworkCall(Comment comment){
RetrofitInterfaces.IPostNewComment service = RetrofitClientInstance.getRetrofitInstance().create(RetrofitInterfaces.IPostNewComment.class);
Call<EventCommentsDao> call = service.listRepos(comment);
call.enqueue(new Callback<EventCommentsDao>() {
@Override
public void onResponse(Call<EventCommentsDao> call, Response<EventCommentsDao> response) {
// get your presenter by:
EventPresenter mPresenter = ((MyActivity) getActivity()).getPresenter();
}
@Override
public void onFailure(Call<EventCommentsDao> call, Throwable t) {
}
});
}

在片段之间的通信方面,不同的替代方案是创建回调接口或使用事件总线。有关更多详细信息,请参阅此帖子 Android MVP:一个具有多个片段的活动

最新更新