public abstract class GroupedRecyclerViewAdapter<T>
extends <any>
描述:适配器分组
通用的分组列表Adapter。通过它可以很方便的实现列表的分组效果。 这个类提供了一系列的对列表的更新、删除和插入等操作的方法。 使用者要使用这些方法的列表进行操作,而不要直接使用RecyclerView.Adapter的方法。 因为当分组列表发生变化时,需要及时更新分组列表的组结构mStructures
1.增加了对XRecyclerView兼容
2.增加了对子项分组支持,主要是针对GridLayoutManager,动态设置getSpanSize,需要覆写getChildSpanSize
作者: zhouyou
日期: 2018/1/30 14:28
版本: v1.0
| 限定符和类型 | 类和说明 |
|---|---|
static interface |
GroupedRecyclerViewAdapter.OnChildClickListener<T> |
static interface |
GroupedRecyclerViewAdapter.OnFooterClickListener<T> |
static interface |
GroupedRecyclerViewAdapter.OnHeaderClickListener<T> |
| 限定符和类型 | 字段和说明 |
|---|---|
protected android.content.Context |
mContext |
protected java.util.ArrayList<GroupStructure> |
mStructures |
static int |
TYPE_CHILD |
static int |
TYPE_FOOTER |
static int |
TYPE_HEADER |
protected XRecyclerView |
xRecyclerView |
| 构造器和说明 |
|---|
GroupedRecyclerViewAdapter(android.content.Context context) |
GroupedRecyclerViewAdapter(android.content.Context context,
java.util.List<T> list) |
| 限定符和类型 | 方法和说明 |
|---|---|
boolean |
addGroup(T data) |
boolean |
addGroups(java.util.List<T> datas) |
void |
changeChild(int groupPosition,
int childPosition)
刷新一组里的某个子项
|
void |
changeChildren(int groupPosition)
刷新一组里的所有子项
|
void |
changeDataSet()
刷新数据列表
|
void |
changeFooter(int groupPosition)
刷新组尾
|
void |
changeGroup(int groupPosition)
刷新一组数据,包括组头,组尾和子项
|
void |
changeHeader(int groupPosition)
刷新组头
|
void |
changeRangeChild(int groupPosition,
int childPosition,
int count)
刷新一组里的多个子项
|
void |
changeRangeGroup(int groupPosition,
int count)
刷新多组数据,包括组头,组尾和子项
|
int |
countGroupItem(int groupPosition)
计算一个组里有多少个Item(头加尾加子项)
|
int |
countGroupRangeItem(int start,
int count)
计算多个组的项的总和
|
abstract int |
getChildLayout(int viewType) |
int |
getChildPositionForPosition(int groupPosition,
int position)
根据下标计算position在组中位置(childPosition)
|
abstract int |
getChildrenCount(int groupPosition) |
int |
getChildSpanSize(int groupPosition,
int childPosition)
提供这个方法可以使外部改变子项的SpanSize。
|
int |
getChildViewType(int groupPosition,
int childPosition) |
abstract int |
getFooterLayout(int viewType) |
int |
getFooterViewType(int groupPosition) |
T |
getGroup(int groupPosition) |
abstract int |
getGroupCount() |
int |
getGroupPositionForPosition(int position)
根据下标计算position所在的组(groupPosition)
|
java.util.List<T> |
getGroups()
分组列表集合
|
abstract int |
getHeaderLayout(int viewType) |
int |
getHeaderViewType(int groupPosition) |
int |
getItemCount() |
int |
getItemViewType(int position) |
int |
getPositionForChild(int groupPosition,
int childPosition)
获取一个组指定的子项下标 如果没有 返回-1
|
int |
getPositionForGroupFooter(int groupPosition)
获取一个组的组尾下标 如果该组没有组尾 返回-1
|
int |
getPositionForGroupHeader(int groupPosition)
获取一个组的组头下标 如果该组没有组头 返回-1
|
abstract boolean |
hasFooter(int groupPosition) |
abstract boolean |
hasHeader(int groupPosition) |
void |
insertChild(int groupPosition,
int childPosition)
插入一个子项到组里
|
void |
insertChildren(int groupPosition)
插入一组里的所有子项
|
void |
insertFooter(int groupPosition)
插入组尾
|
void |
insertGroup(int groupPosition)
插入一组数据
|
void |
insertHeader(int groupPosition)
插入组头
|
void |
insertRangeChild(int groupPosition,
int childPosition,
int count)
插入一组里的多个子项
|
void |
insertRangeGroup(int groupPosition,
int count)
插入一组数据
|
protected int |
itemCount() |
int |
judgeType(int position)
判断item的type 头部 尾部 和 子项
|
void |
onAttachedToRecyclerView(RecyclerView recyclerView) |
abstract void |
onBindChildViewHolder(HelperRecyclerViewHolder holder,
int groupPosition,
int childPosition,
T item) |
abstract void |
onBindFooterViewHolder(HelperRecyclerViewHolder holder,
int groupPosition,
T item) |
abstract void |
onBindHeaderViewHolder(HelperRecyclerViewHolder holder,
int groupPosition,
T item) |
void |
onBindViewHolder(HelperRecyclerViewHolder holder,
int position) |
void |
onBindViewHolder(HelperRecyclerViewHolder holder,
int position,
java.util.List<java.lang.Object> payloads) |
HelperRecyclerViewHolder |
onCreateViewHolder(android.view.ViewGroup parent,
int viewType) |
void |
removeAll()
删除所有数据
|
void |
removeChild(int groupPosition,
int childPosition)
删除一组里的某个子项
|
void |
removeChildren(int groupPosition)
删除一组里的所有子项
|
void |
removeFooter(int groupPosition)
删除组尾
|
void |
removeGroup(int groupPosition)
删除一组数据,包括组头,组尾和子项
|
void |
removeHeader(int groupPosition)
删除组头
|
void |
removeRangeChild(int groupPosition,
int childPosition,
int count)
删除一组里的多个子项
|
void |
removeRangeGroup(int groupPosition,
int count)
删除多组数据,包括组头,组尾和子项
|
boolean |
setGroups(java.util.List<T> datas) |
void |
setOnChildClickListener(GroupedRecyclerViewAdapter.OnChildClickListener listener)
设置子项点击事件
|
void |
setOnFooterClickListener(GroupedRecyclerViewAdapter.OnFooterClickListener listener)
设置组尾点击事件
|
void |
setOnHeaderClickListener(GroupedRecyclerViewAdapter.OnHeaderClickListener listener)
设置组头点击事件
|
public static final int TYPE_HEADER
public static final int TYPE_FOOTER
public static final int TYPE_CHILD
protected android.content.Context mContext
protected java.util.ArrayList<GroupStructure> mStructures
protected XRecyclerView xRecyclerView
public GroupedRecyclerViewAdapter(android.content.Context context,
java.util.List<T> list)
public GroupedRecyclerViewAdapter(android.content.Context context)
public void onAttachedToRecyclerView(RecyclerView recyclerView)
public int getChildSpanSize(int groupPosition,
int childPosition)
SpanSizeLookup#getSpanSize(int)一样。groupPosition - childPosition - public HelperRecyclerViewHolder onCreateViewHolder(android.view.ViewGroup parent, int viewType)
public void onBindViewHolder(HelperRecyclerViewHolder holder, int position)
public void onBindViewHolder(HelperRecyclerViewHolder holder, int position, java.util.List<java.lang.Object> payloads)
public int getItemCount()
protected int itemCount()
public int getItemViewType(int position)
public int getHeaderViewType(int groupPosition)
public int getFooterViewType(int groupPosition)
public int getChildViewType(int groupPosition,
int childPosition)
public boolean setGroups(java.util.List<T> datas)
public boolean addGroups(java.util.List<T> datas)
public boolean addGroup(T data)
public T getGroup(int groupPosition)
public java.util.List<T> getGroups()
public int judgeType(int position)
public int getGroupPositionForPosition(int position)
position - 下标public int getChildPositionForPosition(int groupPosition,
int position)
groupPosition - 所在的组position - 下标public int getPositionForGroupHeader(int groupPosition)
groupPosition - 组下标public int getPositionForGroupFooter(int groupPosition)
groupPosition - 组下标public int getPositionForChild(int groupPosition,
int childPosition)
groupPosition - 组下标childPosition - 子项的组内下标public int countGroupItem(int groupPosition)
public int countGroupRangeItem(int start,
int count)
public void changeDataSet()
public void changeGroup(int groupPosition)
public void changeRangeGroup(int groupPosition,
int count)
public void changeHeader(int groupPosition)
public void changeFooter(int groupPosition)
public void changeChild(int groupPosition,
int childPosition)
public void changeRangeChild(int groupPosition,
int childPosition,
int count)
public void changeChildren(int groupPosition)
public void removeAll()
public void removeGroup(int groupPosition)
public void removeRangeGroup(int groupPosition,
int count)
public void removeHeader(int groupPosition)
public void removeFooter(int groupPosition)
public void removeChild(int groupPosition,
int childPosition)
public void removeRangeChild(int groupPosition,
int childPosition,
int count)
public void removeChildren(int groupPosition)
public void insertGroup(int groupPosition)
groupPosition - public void insertRangeGroup(int groupPosition,
int count)
public void insertHeader(int groupPosition)
public void insertFooter(int groupPosition)
public void insertChild(int groupPosition,
int childPosition)
public void insertRangeChild(int groupPosition,
int childPosition,
int count)
public void insertChildren(int groupPosition)
public void setOnHeaderClickListener(GroupedRecyclerViewAdapter.OnHeaderClickListener listener)
listener - public void setOnFooterClickListener(GroupedRecyclerViewAdapter.OnFooterClickListener listener)
listener - public void setOnChildClickListener(GroupedRecyclerViewAdapter.OnChildClickListener listener)
listener - public abstract int getGroupCount()
public abstract int getChildrenCount(int groupPosition)
public abstract boolean hasHeader(int groupPosition)
public abstract boolean hasFooter(int groupPosition)
public abstract int getHeaderLayout(int viewType)
public abstract int getFooterLayout(int viewType)
public abstract int getChildLayout(int viewType)
public abstract void onBindHeaderViewHolder(HelperRecyclerViewHolder holder, int groupPosition, T item)
public abstract void onBindFooterViewHolder(HelperRecyclerViewHolder holder, int groupPosition, T item)
public abstract void onBindChildViewHolder(HelperRecyclerViewHolder holder, int groupPosition, int childPosition, T item)