【领券联盟】笔记:视频25-分类详情数据通知到UI
破小布的小花狗
发表于
2020-03-30 03:45
1431
课堂笔记
课前准备
- 修改 ICategoryPagerCallback 的3个方法,添加参数 int categoryId
//加载分类内容
void onContentLoaded(List<HomePagerContent.DataBean > contents,int categoryId);
//加载到了更多内容
void onLoadMoreLoaded(List<HomePagerContent.DataBean > contents,int categoryId);
//加载轮播图
void onLooperListLoaded(List<HomePagerContent.DataBean > contents,int categoryId);
- 实现类 HomePagerFragment 也要修改
@Override
public void onContentLoaded(List<HomePagerContent.DataBean> contents,int categoryId) {
}
@Override
public void onLoadMoreLoaded(List<HomePagerContent.DataBean> contents,int categoryId) {
}
@Override
public void onLooperListLoaded(List<HomePagerContent.DataBean> contents,int categoryId) {
}
课堂笔记
- 在 CategoryPagerPresenterImpl 创建 List< ICategoryPagerCallback > 泛型的集合,保存所有 viewpager 注册创建的接口,并在注销接口时移除
private List<ICategoryPagerCallback> callbacks = new ArrayList<>();
@Override
public void registerViewCallback(ICategoryPagerCallback callback) {
if (!callbacks.contains(callback)) {
callbacks.add(callback);
}
}
@Override
public void unregisterViewCallback(ICategoryPagerCallback callback) {
callbacks.remove(callback);
}
- 数据请求成功时需要判断请求的结果是否为空(pagerContent 是 response.body())
private void handleHomePagerContentResult(HomePagerContent pagerContent, int categoryId) {
for (ICategoryPagerCallback callback : callbacks) {
if (pagerContent == null || pagerContent.getData().size() == 0) {
callback.onEmpty(categoryId);
} else {
callback.onContentLoaded(pagerContent.getData(), categoryId);
}
}
}
- 请求失败(网络错误)
private void handleNetworkError(int categoryId) {
for (ICategoryPagerCallback callback : callbacks) {
callback.onError(categoryId);
}
}
- 请求刚开始,加载数据...
@Override
public void getContentByCategoryId(int categoryId) {
for (ICategoryPagerCallback callback : callbacks) {
callback.onLoading(categoryId);
}
.......
}
- CategoryPagerPresenterImpl 完整代码
public class CategoryPagerPresenterImpl implements ICategoryPagerPresent {
private static ICategoryPagerPresent mInstance = null;
private CategoryPagerPresenterImpl() {
}
public static ICategoryPagerPresent getInstance() {
if (mInstance == null) {
mInstance = new CategoryPagerPresenterImpl();
}
return mInstance;
}
private static final int DEFAULT_PAGE = 1;
private Map<Integer, Integer> pagesInfo = new HashMap<>();
@Override
public void getContentByCategoryId(int categoryId) {
for (ICategoryPagerCallback callback : callbacks) {
callback.onLoading(categoryId);
}
Retrofit retrofit = RetrofitManager.getInstance().getRetrofit();
Api api = retrofit.create(Api.class);
Integer targetPage = pagesInfo.get(categoryId);
if (targetPage == null) {
targetPage = DEFAULT_PAGE;
pagesInfo.put(categoryId, targetPage);
}
String homePagerUrl = UrlUtils.createHomePagerUrl(categoryId, targetPage);
Call<HomePagerContent> task = api.getHomePagerContent(homePagerUrl);
task.enqueue(new Callback<HomePagerContent>() {
@Override
public void onResponse(Call<HomePagerContent> call, Response<HomePagerContent> response) {
int code = response.code();
if (code == HttpURLConnection.HTTP_OK) {
HomePagerContent pagerContent = response.body();
//请求成功
handleHomePagerContentResult(pagerContent, categoryId);
} else {
//请求失败
handleNetworkError(categoryId);
}
}
@Override
public void onFailure(Call<HomePagerContent> call, Throwable t) {
//请求失败
handleNetworkError(categoryId);
}
});
}
private void handleNetworkError(int categoryId) {
for (ICategoryPagerCallback callback : callbacks) {
callback.onError(categoryId);
}
}
private void handleHomePagerContentResult(HomePagerContent pagerContent, int categoryId) {
for (ICategoryPagerCallback callback : callbacks) {
if (pagerContent == null || pagerContent.getData().size() == 0) {
callback.onEmpty(categoryId);
} else {
callback.onContentLoaded(pagerContent.getData(), categoryId);
}
}
}
@Override
public void loadMore(int categoryId) {
}
@Override
public void reload() {
}
private List<ICategoryPagerCallback> callbacks = new ArrayList<>();
@Override
public void registerViewCallback(ICategoryPagerCallback callback) {
if (!callbacks.contains(callback)) {
callbacks.add(callback);
}
}
@Override
public void unregisterViewCallback(ICategoryPagerCallback callback) {
callbacks.remove(callback);
}
}
- 在 HomePagerFragment 中根据对应的请求状态设置显示界面
@Override
public void onContentLoaded(List<HomePagerContent.DataBean> contents,int categoryId) {
setUpState(State.SUCCESS);
}
@Override
public void onLoading(int categoryId) {
setUpState(State.LOADING);
}
@Override
public void onError(int categoryId) {
setUpState(State.ERROR);
}
@Override
public void onEmpty(int categoryId) {
setUpState(State.EMPTY);
}