Skip to content

Commit

Permalink
Optimize DraggableController, and fixed bug
Browse files Browse the repository at this point in the history
  • Loading branch information
shichaohui committed Aug 15, 2019
1 parent 1522eef commit b1d21d9
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ private List<HomeItem> getHomeItemData() {
new HomeItem("Section", SectionUseActivity.class, R.mipmap.gv_section),
new HomeItem("EmptyView", EmptyViewUseActivity.class, R.mipmap.gv_empty),
new HomeItem("DragAndSwipe", ItemDragAndSwipeUseActivity.class, R.mipmap.gv_drag_and_swipe),
new HomeItem("MultipleDragAndSwipe", MultipleItemAndDragUseActivity.class, R.mipmap.gv_drag_and_swipe),
new HomeItem("ItemClick", ItemClickActivity.class, R.mipmap.gv_item_click),
new HomeItem("ExpandableItem", ExpandableUseActivity.class, R.mipmap.gv_expandable),
new HomeItem("DataBinding", DataBindingUseActivity.class, R.mipmap.gv_databinding),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public void initView(BaseViewHolder holder) {

if (mItemTouchHelper != null && itemDragEnabled && viewType != LOADING_VIEW && viewType != HEADER_VIEW
&& viewType != EMPTY_VIEW && viewType != FOOTER_VIEW) {
if (mToggleViewId != NO_TOGGLE_VIEW) {
if (hasToggleView()) {
View toggleView = holder.getView(mToggleViewId);
if (toggleView != null) {
toggleView.setTag(R.id.BaseQuickAdapter_viewholder_support, holder);
Expand All @@ -67,9 +67,6 @@ public void initView(BaseViewHolder holder) {
toggleView.setOnTouchListener(mOnToggleViewTouchListener);
}
}
} else {
holder.itemView.setTag(R.id.BaseQuickAdapter_viewholder_support, holder);
holder.itemView.setOnLongClickListener(mOnToggleViewLongClickListener);
}
}
}
Expand Down Expand Up @@ -134,6 +131,16 @@ public void enableDragItem(@NonNull ItemTouchHelper itemTouchHelper) {
enableDragItem(itemTouchHelper, NO_TOGGLE_VIEW, true);
}

/**
* Enable drag items. Use the specified view as toggle.
*
* @param itemTouchHelper {@link ItemTouchHelper}
* @param toggleViewId The toggle view's id.
*/
public void enableDragItem(@NonNull ItemTouchHelper itemTouchHelper, int toggleViewId) {
enableDragItem(itemTouchHelper, toggleViewId, true);
}

/**
* Enable drag items. Use the specified view as toggle.
*
Expand All @@ -156,10 +163,16 @@ public void disableDragItem() {
mItemTouchHelper = null;
}

@Override
public boolean isItemDraggable() {
return itemDragEnabled;
}

@Override
public boolean hasToggleView() {
return mToggleViewId != NO_TOGGLE_VIEW;
}

/**
* <p>Enable swipe items.</p>
* You should attach {@link ItemTouchHelper} which construct with {@link ItemDragAndSwipeCallback} to the Recycler when you enable this.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,12 @@ public ItemDragAndSwipeCallback(DraggableController draggableController) {

@Override
public boolean isLongPressDragEnabled() {
return mBaseItemDraggableAdapter.isItemDraggable() && !mBaseItemDraggableAdapter.hasToggleView();
if (mBaseItemDraggableAdapter != null) {
return mBaseItemDraggableAdapter.isItemDraggable() && !mBaseItemDraggableAdapter.hasToggleView();
} else if (mDraggableListener != null) {
return mDraggableListener.isItemDraggable() && !mDraggableListener.hasToggleView();
}
return false;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,18 @@ public interface IDraggableListener {
*/
boolean isItemSwipeEnable();

/**
* @return boolean
*/
boolean isItemDraggable();

/**
* Is there a toggle view which will trigger drag event.
*
* @return boolean
*/
boolean hasToggleView();

/**
* @param viewHolder viewHolder
*/
Expand Down

0 comments on commit b1d21d9

Please sign in to comment.