From 520889c9472505235ae997b6e61814ac15e80bb1 Mon Sep 17 00:00:00 2001 From: GreenLight <1251191746@qq.com> Date: Thu, 18 Apr 2019 17:13:11 +0800 Subject: [PATCH 1/4] fix the bug that apdapter delay to call setOnItemClickListener() that didn't take effect --- .../adapter/base/BaseQuickAdapter.java | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 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 02291e1d3..5e4c4cc15 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 @@ -963,22 +963,23 @@ private void bindViewClickListener(final BaseViewHolder baseViewHolder) { if (view == null) { return; } - if (getOnItemClickListener() != null) { - view.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { + view.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (getOnItemClickListener() != null) { setOnItemClick(v, baseViewHolder.getLayoutPosition() - getHeaderLayoutCount()); } - }); - } - if (getOnItemLongClickListener() != null) { - view.setOnLongClickListener(new View.OnLongClickListener() { - @Override - public boolean onLongClick(View v) { + } + }); + view.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + if (getOnItemLongClickListener() != null) { return setOnItemLongClick(v, baseViewHolder.getLayoutPosition() - getHeaderLayoutCount()); } - }); - } + return false; + } + }); } /** @@ -1152,7 +1153,7 @@ public int addHeaderView(View header, int index) { * @param index * @param orientation */ - public int addHeaderView(View header,final int index, int orientation) { + public int addHeaderView(View header, final int index, int orientation) { if (mHeaderLayout == null) { mHeaderLayout = new LinearLayout(header.getContext()); if (orientation == LinearLayout.VERTICAL) { @@ -1164,7 +1165,7 @@ public int addHeaderView(View header,final int index, int orientation) { } } final int childCount = mHeaderLayout.getChildCount(); - int mIndex =index; + int mIndex = index; if (index < 0 || index > childCount) { mIndex = childCount; } @@ -1930,6 +1931,7 @@ public int getParentPosition(@NonNull T item) { public interface OnItemChildClickListener { /** * callback method to be invoked when an itemchild in this view has been click + * * @param adapter * @param view The view whihin the ItemView that was clicked * @param position The position of the view int the adapter @@ -1946,6 +1948,7 @@ public interface OnItemChildLongClickListener { /** * callback method to be invoked when an item in this view has been * click and held + * * @param adapter this BaseQuickAdapter adapter * @param view The childView whihin the itemView that was clicked and held. * @param position The position of the view int the adapter From 9ea02c04e79615495212c65f7e3ba5876cb07029 Mon Sep 17 00:00:00 2001 From: GreenLight <1251191746@qq.com> Date: Fri, 19 Apr 2019 19:08:39 +0800 Subject: [PATCH 2/4] another way to solve the problem that delay setOnItemClickListener --- .../adapter/base/BaseQuickAdapter.java | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 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 5e4c4cc15..73ac033f0 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 @@ -74,6 +74,7 @@ public abstract class BaseQuickAdapter extends Recy private LoadMoreView mLoadMoreView = new SimpleLoadMoreView(); private RequestLoadMoreListener mRequestLoadMoreListener; private boolean mEnableLoadMoreEndClick = false; + private List mViewHolders; //Animation /** @@ -476,6 +477,7 @@ public BaseQuickAdapter(@LayoutRes int layoutResId, @Nullable List data) { if (layoutResId != 0) { this.mLayoutResId = layoutResId; } + mViewHolders = new ArrayList<>(); } public BaseQuickAdapter(@Nullable List data) { @@ -780,6 +782,7 @@ public K onCreateViewHolder(ViewGroup parent, int viewType) { default: baseViewHolder = onCreateDefViewHolder(parent, viewType); bindViewClickListener(baseViewHolder); + mViewHolders.add(baseViewHolder); } baseViewHolder.setAdapter(this); return baseViewHolder; @@ -963,23 +966,22 @@ private void bindViewClickListener(final BaseViewHolder baseViewHolder) { if (view == null) { return; } - view.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (getOnItemClickListener() != null) { + if (getOnItemClickListener() != null) { + view.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { setOnItemClick(v, baseViewHolder.getLayoutPosition() - getHeaderLayoutCount()); } - } - }); - view.setOnLongClickListener(new View.OnLongClickListener() { - @Override - public boolean onLongClick(View v) { - if (getOnItemLongClickListener() != null) { + }); + } + if (getOnItemLongClickListener() != null) { + view.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { return setOnItemLongClick(v, baseViewHolder.getLayoutPosition() - getHeaderLayoutCount()); } - return false; - } - }); + }); + } } /** @@ -2001,6 +2003,9 @@ public interface OnItemClickListener { */ public void setOnItemClickListener(@Nullable OnItemClickListener listener) { mOnItemClickListener = listener; + for (BaseViewHolder b : mViewHolders) { + bindViewClickListener(b); + } } /** From 9ad8fe4f718c324a88fece6aba0d3d2e320dc697 Mon Sep 17 00:00:00 2001 From: GreenLight <1251191746@qq.com> Date: Fri, 19 Apr 2019 19:36:38 +0800 Subject: [PATCH 3/4] do same thing in setOnItemLongClickListener --- .../com/chad/library/adapter/base/BaseQuickAdapter.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 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 73ac033f0..7d71cee22 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 @@ -2003,8 +2003,8 @@ public interface OnItemClickListener { */ public void setOnItemClickListener(@Nullable OnItemClickListener listener) { mOnItemClickListener = listener; - for (BaseViewHolder b : mViewHolders) { - bindViewClickListener(b); + for (BaseViewHolder viewHolder : mViewHolders) { + bindViewClickListener(viewHolder); } } @@ -2026,6 +2026,9 @@ public void setOnItemChildClickListener(OnItemChildClickListener listener) { */ public void setOnItemLongClickListener(OnItemLongClickListener listener) { mOnItemLongClickListener = listener; + for (BaseViewHolder viewHolder : mViewHolders) { + bindViewClickListener(viewHolder); + } } /** From fe586becaa3a45f8e42b16aba388c5229f958619 Mon Sep 17 00:00:00 2001 From: GreenLight <1251191746@qq.com> Date: Sat, 20 Apr 2019 13:09:38 +0800 Subject: [PATCH 4/4] avoid null pointer exception --- .../com/chad/library/adapter/base/BaseQuickAdapter.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 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 7d71cee22..e20361384 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 @@ -970,7 +970,9 @@ private void bindViewClickListener(final BaseViewHolder baseViewHolder) { view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - setOnItemClick(v, baseViewHolder.getLayoutPosition() - getHeaderLayoutCount()); + if (getOnItemClickListener() != null) { + setOnItemClick(v, baseViewHolder.getLayoutPosition() - getHeaderLayoutCount()); + } } }); } @@ -978,7 +980,9 @@ public void onClick(View v) { view.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { - return setOnItemLongClick(v, baseViewHolder.getLayoutPosition() - getHeaderLayoutCount()); + if (getOnItemLongClickListener() != null) + return setOnItemLongClick(v, baseViewHolder.getLayoutPosition() - getHeaderLayoutCount()); + return false; } }); }