本篇文章掺杂了过多的作者个人思维,不利于读者阅读,新写了一篇对读者非常友好、条理清晰的BaseRecyclerViewFragment,地址
http://blog.csdn.net/qq_36523667/article/details/78721251
之前一篇文章已经把recyclerview尽可能简化了,这里再简化一步,仅仅在子类中写出操作即可
BaseRecyclerViewFragment
public abstract class BaseRecyclerViewFragment<T> extends BaseFragment { private RecyclerView recyclerView; private List<T> list; private int itemLayoutId; private String orientation; // 取得所有RecyclerView相关 protected abstract Map<String, Object> getMap(); // 对item及其子view的操作 protected abstract void initRecyclerViewOperate(ViewHolder holder, T t); // 从Map中取出所有RecyclerView相关 @Override protected void initData() { Map<String, Object> map = getMap(); recyclerView = (RecyclerView)map.get("RecyclerView"); list = (List<T>)map.get("List"); itemLayoutId = (Integer) map.get("ItemLayoutId"); orientation = map.get("Orientation")+""; } // 取得adapter private CommonAdapter initRecyclerViewAdapter() { return new CommonAdapter<T>(getContext(), itemLayoutId, list) { @Override protected void convert(ViewHolder holder, T t, int position) { initRecyclerViewOperate(holder, t); } }; } @Override protected void initWidget(View root) { LinearLayoutManager layoutManager = new LinearLayoutManager(getContext()); // 判断方向 if (orientation.equals("horizontal")){ layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); } // 获取adapter CommonAdapter adapter = initRecyclerViewAdapter(); recyclerView.setLayoutManager(layoutManager); recyclerView.setAdapter(adapter); } //abstract getLayoutId }所以在子类中只需要这样,真正地符合了开闭原则
public class VideoFragment extends BaseRecyclerViewFragment<TypeListBean> { // 布局 @Override protected int getLayoutId() { return R.layout.fragment_course_video; } // RecyclerView @BindView(R.id.recycler_view) RecyclerView mRecyclerView; // RecyclerView data private List<TypeListBean> typeList; // rec data from net @Override protected void initData() { typeList = new ArrayList<>(); TypeListBean typeListBean = new TypeListBean(); typeListBean.setUrl("http://bunengshuodemimi:8080/fitapp/list1_fit_type/zengji.jpg"); typeListBean.setTitle("增肌"); typeList.add(typeListBean); super.initData(); } // recyclerView相关 @Override protected Map<String, Object> getMap() { Map<String, Object> map = new HashMap<>(); map.put("RecyclerView", mRecyclerView); map.put("List", typeList); map.put("ItemLayoutId", R.layout.item_rec_type); map.put("Orientation", "vertical"); return map; } // recyclerView操作 @Override protected void initRecyclerViewOperate(ViewHolder holder, TypeListBean typeListBean) { // 设置标题 holder.setText(R.id.type_title, typeListBean.getTitle()); // 设置背景 ImageView mImageView = holder.getView(R.id.type_image); Glide.with(getActivity()).load(typeListBean.getUrl()).into(mImageView); } }