RecyclerView自从2015年推出以来,至今在开源中出现了各种各样的开源库,五花八门,但是,在使用的过程中是否真的适合你呢?这个我就不太清楚,然而,我感觉我还没有找到使用更方便的库,因此,我创建了这个库ExpandRecyclerView。
在2015年我创建了一个RecyclerView分割线库叫RecyclerViewDecoration,1.x版本虽然具备很多属性,但是用起来不是很方便。直到2017年,我才改成Builder的方式2.x版,也优化了算法,同时也有一些小伙伴给我提了一些新的需求。到现在为止,也还有一些新的需求,这些问题,我后面都会陆续更新。
包括现在要介绍的ExpandRecyclerView,从1.3版本开始将RecyclerViewDecoration的内容也合并这里。陆续会有更多分割线和adapter结合的API出现。这个库的出现,目的很简单,就是要在使用的过程中,尽量减少使用者的代码量。不清楚怎么使用,可以参考sample中的例子,下面只是简单的介绍。
ExpandRecyclerView目前主要包含几个部分:
Adapter
1.RecyclerViewAdapter
这个adapter可以支持单种item和多种item。
例:(单种item)
RecyclerViewAdapter adapter = new RecyclerViewAdapter<>(this, Arrays.asList(titles) , R.layout.item_main_list , new RecyclerViewSingleTypeProcessor<String>() { @Override public void onBindViewHolder(RecyclerViewViewHolder holder, final int position, String str) { TextView textView = holder.getView(R.id.tv_content); textView.setText(str); } });
例:(多种item)
mAdapter = new RecyclerViewAdapter<>(this, mDataList , new int[]{R.layout.item_list_type0, R.layout.item_list_type1} , new RecyclerViewMultipleTypeProcessor<Car>() { @Override public void onBindViewHolder(RecyclerViewViewHolder holder, int position, Car object) { if(getItemViewType(position) == 0) { TextView textView = holder.getView(R.id.tv_content); textView.setText(object.getBrand() + "/" + object.getTypeName()); }else{ } } @Override public int getItemViewType(int position) { //define two viewTypes if (position % 2 == 0) return 1; return 0; } });
2.RecyclerViewGroupAdapter
特别要注意的是这个Adapter的第一个item一定是一个group type。
例:
mGroupAdapter = new RecyclerViewGroupAdapter<>(this, mDataList , new int[]{R.layout.item_group_type, R.layout.item_list_type1} , new RecyclerViewGroupTypeProcessor<Car>() { @Override public void onBindGroupViewHolder(RecyclerViewViewHolder holder, int groupPosition, Car car) { TextView tvGroup = holder.getView(R.id.tv_group); tvGroup.setText(car.getGroup()); } @Override public void onBindItemViewHolder(RecyclerViewViewHolder holder, final int groupPosition, final int itemPosition, Car car) { TextView tvContent = holder.getView(R.id.tv_content); tvContent.setText("Car brand:" + car.getBrand() + " / type: " + car.getTypeName()); tvContent.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(GroupListActivity.this , "Group: " + groupPosition + "\titemPosition: " + itemPosition, Toast.LENGTH_SHORT).show(); } }); } @Override public int getItemViewType(int position) { if (mDataList.get(position).getGroup() != null) return 0; return 1; } });
ItemDecoration
之前介绍的https://blog.csdn.net/arjinmc/article/details/74508483
还有新的RecyclerViewGroupItemDecoration分组分割线。可以在sample中GroupGridActivity中可以看到它的一种使用方式。
Style
转换一些通用的RecyclerView布局方式。
更多API的详细介绍,请查看wiki。
如果你发现了bug,或者你有什么新的想法,需求欢迎email给我。[email protected]