Skip to content

Commit

Permalink
添加方法 & 重命名方法 & 更新注释
Browse files Browse the repository at this point in the history
1. 为 SelectableAdapter 添加方法:
    a. setOnItemClickListener
    b. setOnItemLongClickListener
2. 重命名 SelectableHelper 的方法:
    a. onBindViewHolder -> updateSelectState
  • Loading branch information
jrfeng committed Mar 22, 2020
1 parent 74195f5 commit 7616b90
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 3 deletions.
30 changes: 29 additions & 1 deletion helper/src/main/java/recyclerview/helper/SelectableAdapter.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,35 +30,43 @@

/**
* 继承该类即可让你的 RecyclerView.Adapter 具有单选和多选功能。
* <p>
* 该类还支持列表项的 “点击” 与 “长按点击” 功能。
*
* @param <Holder> 该参数必须继承 RecyclerView.ViewHolder 类并实现 {@link SelectableHelper.Selectable}
* 接口。
*/
public abstract class SelectableAdapter<Holder extends RecyclerView.ViewHolder & SelectableHelper.Selectable>
extends RecyclerView.Adapter<Holder> {
private SelectableHelper mSelectableHelper;
private ItemClickHelper mItemClickHelper;

public SelectableAdapter() {
mSelectableHelper = new SelectableHelper(this);
mItemClickHelper = new ItemClickHelper();
}

@Override
public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);

mSelectableHelper.attachToRecyclerView(recyclerView);
mItemClickHelper.attachToRecyclerView(recyclerView);
}

@Override
public void onDetachedFromRecyclerView(@NonNull RecyclerView recyclerView) {
super.onDetachedFromRecyclerView(recyclerView);

mSelectableHelper.detach();
mItemClickHelper.detach();
}

@Override
public void onBindViewHolder(@NonNull Holder holder, int position) {
mSelectableHelper.onBindViewHolder(holder, position);
mSelectableHelper.updateSelectState(holder, position);
mItemClickHelper.bindClickListener(holder.itemView);
mItemClickHelper.bindLongClickListener(holder.itemView);
}

/**
Expand Down Expand Up @@ -98,6 +106,26 @@ public void setSelect(int position, boolean select) throws IllegalArgumentExcept
mSelectableHelper.setSelect(position, select);
}

/**
* 设置 {@link ItemClickHelper.OnItemClickListener} 事件监听器,该监听器会在某个列表项被 “点击” 时调用。
*
* @param listener 要设置的 {@link ItemClickHelper.OnItemClickListener} 事件监听器,可为 null。为
* null 时相当于清除上次设置的事件监听器。
*/
public void setOnItemClickListener(ItemClickHelper.OnItemClickListener listener) {
mItemClickHelper.setOnItemClickListener(listener);
}

/**
* 设置 {@link ItemClickHelper.OnItemLongClickListener} 事件监听器,该监听器会在某个列表项被 “长按点击” 时调用。
*
* @param listener 要设置的 {@link ItemClickHelper.OnItemLongClickListener} 事件监听器,可为 null。
* 为 null 时相当于清除上次设置的事件监听器。
*/
public void setOnItemLongClickListener(ItemClickHelper.OnItemLongClickListener listener) {
mItemClickHelper.setOnItemLongClickListener(listener);
}

/**
* 获取所有已被选中的列表项的索引值。
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
* <li>调用 {@link #attachToRecyclerView(RecyclerView)} 方法将当前 {@link SelectableHelper} 对象
* 附加到一个 RecyclerView 对象上;
* <li>在 RecyclerView.Adapter 的 onBindViewHolder 方法中调用当前 SelectableHelper 对象的
* {@link #onBindViewHolder(RecyclerView.ViewHolder, int)} 方法;</li>
* {@link #updateSelectState(RecyclerView.ViewHolder, int)} 方法;</li>
* </ul>
* <p>
* 当不再需要一个 {@link SelectableHelper} 对象时,应该调用它的 {@link #detach()} 方法分离它。建议在
Expand Down Expand Up @@ -77,7 +77,7 @@ public SelectableHelper(@NonNull RecyclerView.Adapter adapter) {
/**
* 需要在 RecyclerView.onBindViewHolder 方法中调用该方法。
*/
public <Holder extends RecyclerView.ViewHolder & Selectable> void onBindViewHolder(@NonNull Holder holder, int position) {
public <Holder extends RecyclerView.ViewHolder & Selectable> void updateSelectState(@NonNull Holder holder, int position) {
holder.onUnselected();
if (mSelectedPositions.contains(position)) {
holder.onSelected();
Expand Down

0 comments on commit 7616b90

Please sign in to comment.