-
Notifications
You must be signed in to change notification settings - Fork 1
Home
jrfeng edited this page Mar 22, 2020
·
9 revisions
rv-helper
提供了以下 3
个 RecyclerView
帮助类:
-
ItemClickHelper
:用于帮助处理RecyclerView
中列表项的 “点击/长按点击” 事件。 -
SelectableHelper
:用于帮助实现RecyclerView
中列表项的 单选与多选 功能。 -
ScrollToPositionHelper
:滚动到RecyclerView
的某一Item
位置时对该Item
做 背景闪动动画。
功能:用于帮助处理 RecyclerView
中列表项的 “点击/长按点击” 事件。
可用于处理列表项视图中任意一个或多个 View
的 “点击/长按点击” 事件。
使用步骤:
- 创建一个
ItemClickHelper
对象; - 调用
attachToRecyclerView(RecyclerView)
方法将ItemClickHelper
对象附件到一个RecyclerView
对象上; - (可选)调用
setOnItemClickListener(OnItemClickListener)
设置 “点击” 事件 监听器; - (可选)调用
setOnItemLongClickListener(OnItemLongClickListener)
设置 “长按点击” 事件监听器; - 在
RecyclerView.Adapter
的onBindViewHolder
方法中调用bindClickListener(View...)
方法绑定某个或多个View
的 “点击” 事件监听器; - 调用
bindLongClickListener(View...)
方法绑定某个或多个View
的 “长按点击” 事件监听器。
当不再需要 ItemClickHelper
对象时,应该调用 detach()
方法进行分离。建议在 RecyclerView.Adapter
的 onDetachedFromRecyclerView
方法中调用该方法。
例:
public abstract class ItemClickableAdapter<VH extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<VH> {
private ItemClickHelper mItemClickHelper = new ItemClickHelper();
@Override
public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
// 附加到 RecyclerView 对象上
mItemClickHelper.attachToRecyclerView(recyclerView);
}
@Override
public void onDetachedFromRecyclerView(@NonNull RecyclerView recyclerView) {
super.onDetachedFromRecyclerView(recyclerView);
// 分离 mItemClickHelper
mItemClickHelper.detach();
}
@Override
public void onBindViewHolder(@NonNull VH holder, int position) {
// 绑定列表项的 “点击” 事件
mItemClickHelper.bindClickListener(holder.itemView);
// 绑定列表项的 “长按点击” 事件
mItemClickHelper.bindLongClickListener(holder.itemView);
}
public void setOnItemClickListener(ItemClickHelper.OnItemClickListener listener) {
mItemClickHelper.setOnItemClickListener(listener);
}
public void setOnItemLongClickListener(ItemClickHelper.OnItemLongClickListener listener) {
mItemClickHelper.setOnItemLongClickListener(listener);
}
}
如果你仅关心列表项的点击事件,那么继承 ItemClickableAdapter
类可能是更好的选择。
功能:用于帮助实现 RecyclerView
中列表项的单选与多选功能。
使用步骤:
- 创建一个
SelectableHelper
对象; - 调用
attachToRecyclerView(RecyclerView)
方法将当前SelectableHelper
对象 附加到一个RecyclerView
对象上; - 在
RecyclerView.Adapter
的onBindViewHolder
方法中调用当前SelectableHelper
对象的updateSelectState(RecyclerView.ViewHolder, int)
方法。
当不再需要一个 SelectableHelper
对象时,应该调用它的 detach()
方法分离它。建议在 RecyclerView.Adapter
的 onDetachedFromRecyclerView
方法中调用该方法。
例:
public abstract class SelectableAdapter<Holder extends RecyclerView.ViewHolder & SelectableHelper.Selectable>
extends RecyclerView.Adapter<Holder> {
private SelectableHelper mSelectableHelper;
...
public SelectableAdapter() {
mSelectableHelper = new SelectableHelper(this);
...
}
@Override
public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
mSelectableHelper.attachToRecyclerView(recyclerView);
...
}
@Override
public void onDetachedFromRecyclerView(@NonNull RecyclerView recyclerView) {
super.onDetachedFromRecyclerView(recyclerView);
mSelectableHelper.detach();
...
}
@Override
public void onBindViewHolder(@NonNull Holder holder, int position) {
mSelectableHelper.updateSelectState(holder, position);
...
}
...
}
为了避免多余的模板代码,你可以继承 SelectableAdapter
类。
功能:滚动到 RecyclerView
的某一 Item
位置时对该 Item
做背景闪动动画。
注意!该类不支持低于 API Level 16
的版本。
默认情况下,背景闪动动画的颜色为黄色(Color.YELLOW
);持续时为 300ms
;插值器为 LinearInterpolator
。
可以调用 setAnimDuration(int)
方法和 setAnimInterpolator(TimeInterpolator)
方 法设置动画的持续时间与插值器。
使用步骤:
- 创建一个
ScrollToPositionHelper
对象; - 当要滚动到
RecyclerView
的某个位置时, 调用该对象的scrollToPosition(int)
或者smoothScrollToPosition(int)
方法即可。
例:
ScrollToPositionHelper helper = new ScrollToPositionHelper(recyclerView);
helper.scrollToPosition(40);