From 0b9fbf343e741f0ce265200c5f683c2021f61ad0 Mon Sep 17 00:00:00 2001 From: luoxwen Date: Thu, 14 Jul 2016 16:12:57 +0800 Subject: [PATCH] The views create by adapter can not be swiped --- .../ItemDragAndSwipeUseActivity.java | 12 ++++++ .../adapter/base/BaseQuickAdapter.java | 8 ++-- .../callback/ItemDragAndSwipeCallback.java | 39 +++++++++++++++---- 3 files changed, 48 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ItemDragAndSwipeUseActivity.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ItemDragAndSwipeUseActivity.java index 3d0d404d1..28345d36a 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ItemDragAndSwipeUseActivity.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/ItemDragAndSwipeUseActivity.java @@ -6,11 +6,14 @@ import android.graphics.Paint; import android.os.Bundle; import android.support.v4.content.ContextCompat; +import android.support.v4.widget.DrawerLayout; import android.support.v7.widget.CardView; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.helper.ItemTouchHelper; import android.util.Log; +import android.view.View; +import android.view.ViewGroup; import com.chad.baserecyclerviewadapterhelper.adapter.ItemDragAdapter; import com.chad.library.adapter.base.BaseViewHolder; @@ -107,6 +110,8 @@ public void onItemSwipeMoving(Canvas canvas, RecyclerView.ViewHolder viewHolder, mAdapter.enableDragItem(mItemTouchHelper); mAdapter.setOnItemDragListener(listener); + mAdapter.addHeaderView(getView()); + mAdapter.addFooterView(getView()); mRecyclerView.setAdapter(mAdapter); } @@ -118,4 +123,11 @@ private List generateData(int size) { return data; } + private View getView() { + View view = getLayoutInflater().inflate(R.layout.head_view, null); + view.findViewById(R.id.tv).setVisibility(View.GONE); + view.setLayoutParams(new DrawerLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); + return view; + } + } diff --git a/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java b/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java index 31535071f..8200e0c88 100755 --- a/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java +++ b/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java @@ -62,10 +62,10 @@ public abstract class BaseQuickAdapter extends RecyclerView.Adapter mData; - protected static final int HEADER_VIEW = 0x00000111; - protected static final int LOADING_VIEW = 0x00000222; - protected static final int FOOTER_VIEW = 0x00000333; - protected static final int EMPTY_VIEW = 0x00000555; + public static final int HEADER_VIEW = 0x00000111; + public static final int LOADING_VIEW = 0x00000222; + public static final int FOOTER_VIEW = 0x00000333; + public static final int EMPTY_VIEW = 0x00000555; private View mLoadingView; @IntDef({ALPHAIN, SCALEIN, SLIDEIN_BOTTOM, SLIDEIN_LEFT, SLIDEIN_RIGHT}) 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 dca9156ba..3bb0ab0d5 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,10 +39,12 @@ public boolean isItemViewSwipeEnabled() { @Override public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) { - if (actionState == ItemTouchHelper.ACTION_STATE_DRAG) { + if (actionState == ItemTouchHelper.ACTION_STATE_DRAG + && !isViewCreateByAdapter(viewHolder)) { mAdapter.onItemDragStart(viewHolder); viewHolder.itemView.setTag(R.id.BaseQuickAdapter_dragging_support, true); - } else if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) { + } else if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE + && !isViewCreateByAdapter(viewHolder)) { mAdapter.onItemSwipeStart(viewHolder); viewHolder.itemView.setTag(R.id.BaseQuickAdapter_swiping_support, true); } @@ -52,6 +54,9 @@ public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionStat @Override public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { super.clearView(recyclerView, viewHolder); + if (isViewCreateByAdapter(viewHolder)) { + return; + } if (viewHolder.itemView.getTag(R.id.BaseQuickAdapter_dragging_support) != null && (Boolean)viewHolder.itemView.getTag(R.id.BaseQuickAdapter_dragging_support)) { @@ -67,6 +72,10 @@ public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHol @Override public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { + if (isViewCreateByAdapter(viewHolder)) { + return makeMovementFlags(0, 0); + } + return makeMovementFlags(mDragMoveFlags, mSwipeMoveFlags); } @@ -86,7 +95,9 @@ public void onMoved(RecyclerView recyclerView, RecyclerView.ViewHolder source, i @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { - mAdapter.onItemSwiped(viewHolder); + if (!isViewCreateByAdapter(viewHolder)) { + mAdapter.onItemSwiped(viewHolder); + } } @Override @@ -147,18 +158,22 @@ public void setSwipeMoveFlags(int swipeMoveFlags) { } @Override - public void onChildDrawOver(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { + public void onChildDrawOver(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, + float dX, float dY, int actionState, boolean isCurrentlyActive) { super.onChildDrawOver(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive); - if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) { + if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE + && !isViewCreateByAdapter(viewHolder)) { View itemView = viewHolder.itemView; c.save(); if (dX > 0) { - c.clipRect(itemView.getLeft(), itemView.getTop(), itemView.getLeft() + dX, itemView.getBottom()); + c.clipRect(itemView.getLeft(), itemView.getTop(), + itemView.getLeft() + dX, itemView.getBottom()); c.translate(itemView.getLeft(), itemView.getTop()); } else { - c.clipRect(itemView.getRight() + dX, itemView.getTop(), itemView.getRight(), itemView.getBottom()); + c.clipRect(itemView.getRight() + dX, itemView.getTop(), + itemView.getRight(), itemView.getBottom()); c.translate(itemView.getRight() + dX, itemView.getTop()); } @@ -167,4 +182,14 @@ public void onChildDrawOver(Canvas c, RecyclerView recyclerView, RecyclerView.Vi } } + + private boolean isViewCreateByAdapter(RecyclerView.ViewHolder viewHolder) { + int type = viewHolder.getItemViewType(); + if (type == mAdapter.HEADER_VIEW || type == mAdapter.LOADING_VIEW + || type == mAdapter.FOOTER_VIEW || type == mAdapter.EMPTY_VIEW) { + return true; + } + return false; + + } }