From 42a6241476ddd7ba994d8654d125dbefe222f0d3 Mon Sep 17 00:00:00 2001 From: Allen Date: Wed, 22 Mar 2017 11:24:18 +0800 Subject: [PATCH] fix item long click bug --- .../adapter/base/BaseQuickAdapter.java | 7 ++-- .../library/adapter/base/BaseViewHolder.java | 38 ++++++++++--------- 2 files changed, 24 insertions(+), 21 deletions(-) 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 762f11fe1..c66d90e8b 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 @@ -54,7 +54,6 @@ import java.util.ArrayList; import java.util.List; -import static android.R.attr.data; import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; @@ -801,7 +800,7 @@ private void bindViewClickListener(final BaseViewHolder baseViewHolder) { public void onClick(View v) { if (getOnItemClickListener() != null&&baseViewHolder!=null) { - getOnItemClickListener().onItemClick(BaseQuickAdapter.this, view, baseViewHolder.getLayoutPosition() - getHeaderLayoutCount()); + getOnItemClickListener().onItemClick(BaseQuickAdapter.this, v, baseViewHolder.getLayoutPosition() - getHeaderLayoutCount()); } } @@ -809,8 +808,8 @@ public void onClick(View v) { view.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { - if (getOnItemChildClickListener() != null&&baseViewHolder!=null) { - return getOnItemLongClickListener().onItemLongClick(BaseQuickAdapter.this, view, baseViewHolder.getLayoutPosition() - getHeaderLayoutCount()); + if (getOnItemLongClickListener() != null&&baseViewHolder!=null) { + return getOnItemLongClickListener().onItemLongClick(BaseQuickAdapter.this, v, baseViewHolder.getLayoutPosition() - getHeaderLayoutCount()); } return false; diff --git a/library/src/main/java/com/chad/library/adapter/base/BaseViewHolder.java b/library/src/main/java/com/chad/library/adapter/base/BaseViewHolder.java index 8d0dfb745..6d1cabdf6 100755 --- a/library/src/main/java/com/chad/library/adapter/base/BaseViewHolder.java +++ b/library/src/main/java/com/chad/library/adapter/base/BaseViewHolder.java @@ -82,7 +82,7 @@ public BaseViewHolder(final View view) { } private int getClickPosition() { - return getLayoutPosition()-adapter.getHeaderLayoutCount(); + return getLayoutPosition() - adapter.getHeaderLayoutCount(); } public HashSet getItemChildLongClickViewIds() { @@ -327,6 +327,7 @@ public BaseViewHolder setRating(int viewId, float rating, int max) { /** * Sets the on click listener of the view. + * * @param viewId The view id. * @param listener The on click listener; * @return The BaseViewHolder for chaining. @@ -340,36 +341,38 @@ public BaseViewHolder setOnClickListener(int viewId, View.OnClickListener listen /** * add childView id + * * @param viewId add the child view id can support childview click - * @return - * if you use adapter bind listener + * @return if you use adapter bind listener * @link {(adapter.setOnItemChildClickListener(listener))} - * + *

* or if you can use recyclerView.addOnItemTouch(listerer) wo also support this menthod */ public BaseViewHolder addOnClickListener(final int viewId) { childClickViewIds.add(viewId); final View view = getView(viewId); - if (view!=null){ + if (!view.isClickable()) { + view.setClickable(true); + } + if (view != null) { view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (adapter.getOnItemChildClickListener() != null) { - adapter.getOnItemChildClickListener().onItemChildClick(adapter, view, getClickPosition()); + adapter.getOnItemChildClickListener().onItemChildClick(adapter, v, getClickPosition()); } } }); } - if (!view.isClickable()) { - view.setClickable(true); - } + return this; } /** * set nestview id + * * @param viewId add the child view id can support childview click * @return */ @@ -382,30 +385,31 @@ public BaseViewHolder setNestView(int viewId) { /** * add long click view id + * * @param viewId - * @return - * if you use adapter bind listener + * @return if you use adapter bind listener * @link {(adapter.setOnItemChildLongClickListener(listener))} - * + *

* or if you can use recyclerView.addOnItemTouch(listerer) wo also support this menthod */ public BaseViewHolder addOnLongClickListener(final int viewId) { itemChildLongClickViewIds.add(viewId); final View view = getView(viewId); - if (view!=null){ + if (!view.isLongClickable()) { + view.setLongClickable(true); + } + if (view != null) { view.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { if (adapter.getmOnItemChildLongClickListener() != null) { - adapter.getmOnItemChildLongClickListener().onItemChildLongClick(adapter, view, getClickPosition()); + adapter.getmOnItemChildLongClickListener().onItemChildLongClick(adapter, v, getClickPosition()); } return false; } }); } - if (!view.isLongClickable()) { - view.setLongClickable(true); - } + return this; }