目标描述
- 首页每个大的item模块受后台数据可控(item顺序、显示隐藏、title标签等)
-
代码易升级易维护
image
目前缺陷
- 目前整体采用RecyclerView,最新书籍是其item,其他部分整体作为一个头部item
- 头部item布局写死,无法通过后台可配置
- 所有的item数据填充都在Adapter中,代码粒度过大,后期不易维护
代码改造
- 整体采用RecyclerView,将每一种类型当做item,并将每一个类型抽象为接口,后期如再添加一个其他类型item,只要实现这个接口将这个类型布局及数据填充上即可
/**
* 首页item
*
* @author kaily_zhou
* @date 2018/11/27 下午1:46
*/
public interface IItemHome {
public int itemLayoutId();
public void itemData(BaseViewHolder helper, HomeModuleListInfo item);
public void updateData(NewHomePageInfo homePageInfo, CommunityHomeInfo communityHomeInfo);
}
- 将每个IItemHome实现类添加到HashMap中,使用时候根据后台发过来的item类型在hashmap中找到具体item实现类填充数据即可,后期如添加或者废弃某种类型的item,只要在此HashMap中添加或删除此类型item实现类即可
private Map<Integer, IItemHome> mapItem = new HashMap<>();
/**
* 添加相应类型item
*
* @param type
* @param itemHome
*/
private void addItemHomeType(int type, IItemHome itemHome) {
if (itemHome != null) {
mapItem.put(type, itemHome);
addItemType(type, itemHome.itemLayoutId());
}
}
/**
* 初始化item实现类,并添加到map中去
*/
private void initItemHome() {
//如废弃此类型的item,只要注释掉此句即可
addItemHomeType(HomeModuleListInfo.ITEM_TYPE_DEFAULT, new ItemHomeDefault(context, homePageInfo, communityHomeInfo));
addItemHomeType(HomeModuleListInfo.ITEM_TYPE_WEEK_RECOMMEND, new ItemHomeWeekRecommend(context, homePageInfo, communityHomeInfo));
addItemHomeType(HomeModuleListInfo.ITEM_TYPE_VIP, new ItemHomeVip(context, homePageInfo, communityHomeInfo));
addItemHomeType(HomeModuleListInfo.ITEM_TYPE_EXPERIENCE, new ItemHomeExperience(context, homePageInfo, communityHomeInfo));
addItemHomeType(HomeModuleListInfo.ITEM_TYPE_CODE_BOOK_LIST, new ItemHomeTopicalBook(context, homePageInfo, communityHomeInfo));
addItemHomeType(HomeModuleListInfo.ITEM_TYPE_CODE_RECOMMEND_LIST, new ItemHomeRecommend(context, homePageInfo, communityHomeInfo));
addItemHomeType(HomeModuleListInfo.ITEM_TYPE_CODE_CLASSIFY, new ItemHomeClassify(context, homePageInfo, communityHomeInfo));
addItemHomeType(HomeModuleListInfo.ITEM_TYPE_CODE_NEW_BOOK_LIST, new ItemHomeNewBook(context, homePageInfo, communityHomeInfo));
addItemHomeType(HomeModuleListInfo.ITEM_TYPE_CODE_BANNER_LIST, new ItemHomeBanner(context, homePageInfo, communityHomeInfo));
addItemHomeType(HomeModuleListInfo.ITEM_TYPE_CODE_PACK_LIST,
new ItemHomeCoursePack(context, homePageInfo, communityHomeInfo, ItemHomeCoursePack.COURSE_PACK_TYPE));
addItemHomeType(HomeModuleListInfo.ITEM_TYPE_CODE_PACK_OPTION_LIST,
new ItemHomeCoursePack(context, homePageInfo, communityHomeInfo, ItemHomeCoursePack.COURSE_OPT_PACK_TYPE));
}
//根据后台配置信息寻找具体类型填充数据
@Override
protected void convert(BaseViewHolder helper, HomeModuleListInfo item) {
int itemViewType = helper.getItemViewType();
IItemHome itemHome = getItemHomeType(itemViewType);
if (itemHome != null && homePageInfo != null && communityHomeInfo != null && item != null && "1".equals(item.getDisplayFlag())) {
setItemVisible(helper, View.VISIBLE);
itemHome.itemData(helper, item);
} else {
setItemVisible(helper, View.GONE);
}
}
package com.chiyue.qiye.domain.main.home.item;
import android.content.Context;
import android.view.View;
import com.chad.library.adapter.base.BaseViewHolder;
import com.chiyue.qiye.R;
import com.chiyue.qiye.bean.CommunityHomeInfo;
import com.chiyue.qiye.bean.HomeModuleListInfo;
import com.chiyue.qiye.bean.NewHomePageInfo;
/**
* item默认类型
*
* @date 2018/11/27 下午2:08
* @author: kaily_zhou
*/
public class ItemHomeDefault extends BaseItemHome {
public ItemHomeDefault(Context context, NewHomePageInfo homePageInfo,
CommunityHomeInfo communityHomeInfo) {
super(context, homePageInfo, communityHomeInfo);
}
@Override
public int itemLayoutId() {
return R.layout.item_community_home_default;
}
@Override
public void itemData(BaseViewHolder helper, HomeModuleListInfo item) {
setItemVisible(helper, View.GONE);
}
}
网友评论