From b1d21d90c0f3e4090b6d367647381257f3e61877 Mon Sep 17 00:00:00 2001 From: shichaohui <464206200@qq.com> Date: Thu, 15 Aug 2019 11:47:19 +0800 Subject: [PATCH] Optimize DraggableController, and fixed bug --- .../HomeActivity.java | 1 + .../adapter/base/DraggableController.java | 21 +++++++++++++++---- .../callback/ItemDragAndSwipeCallback.java | 7 ++++++- .../base/listener/IDraggableListener.java | 12 +++++++++++ 4 files changed, 36 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/HomeActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/HomeActivity.java index ae8879a48..d7110ea51 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/HomeActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/HomeActivity.java @@ -57,6 +57,7 @@ private List 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), diff --git a/library/src/main/java/com/chad/library/adapter/base/DraggableController.java b/library/src/main/java/com/chad/library/adapter/base/DraggableController.java index c96e24d97..96af4c724 100644 --- a/library/src/main/java/com/chad/library/adapter/base/DraggableController.java +++ b/library/src/main/java/com/chad/library/adapter/base/DraggableController.java @@ -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); @@ -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); } } } @@ -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. * @@ -156,10 +163,16 @@ public void disableDragItem() { mItemTouchHelper = null; } + @Override public boolean isItemDraggable() { return itemDragEnabled; } + @Override + public boolean hasToggleView() { + return mToggleViewId != NO_TOGGLE_VIEW; + } + /** *

Enable swipe items.

* You should attach {@link ItemTouchHelper} which construct with {@link ItemDragAndSwipeCallback} to the Recycler when you enable this. diff --git a/library/src/main/java/com/chad/library/adapter/base/callback/ItemDragAndSwipeCallback.java b/library/src/main/java/com/chad/library/adapter/base/callback/ItemDragAndSwipeCallback.java index b2fe0c27b..d9404d959 100644 --- a/library/src/main/java/com/chad/library/adapter/base/callback/ItemDragAndSwipeCallback.java +++ b/library/src/main/java/com/chad/library/adapter/base/callback/ItemDragAndSwipeCallback.java @@ -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 diff --git a/library/src/main/java/com/chad/library/adapter/base/listener/IDraggableListener.java b/library/src/main/java/com/chad/library/adapter/base/listener/IDraggableListener.java index d4e9209a7..3ffb323ce 100644 --- a/library/src/main/java/com/chad/library/adapter/base/listener/IDraggableListener.java +++ b/library/src/main/java/com/chad/library/adapter/base/listener/IDraggableListener.java @@ -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 */