From f22353d590b5cb9024012c85b2f457217d0859f6 Mon Sep 17 00:00:00 2001 From: kHRYSTAL <723526676@qq.com> Date: Sun, 19 Nov 2017 00:34:21 +0800 Subject: [PATCH] fix notifydatasetchange display error (cherry picked from commit 10eeb5d) --- .../library/widget/CircleRecyclerView.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/library/src/main/java/me/khrystal/library/widget/CircleRecyclerView.java b/library/src/main/java/me/khrystal/library/widget/CircleRecyclerView.java index 4e40a82..679655c 100644 --- a/library/src/main/java/me/khrystal/library/widget/CircleRecyclerView.java +++ b/library/src/main/java/me/khrystal/library/widget/CircleRecyclerView.java @@ -8,6 +8,8 @@ import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.AttributeSet; +import android.util.Log; +import android.util.SparseArray; import android.view.MotionEvent; import android.view.View; @@ -25,6 +27,8 @@ */ public class CircleRecyclerView extends RecyclerView implements View.OnClickListener { + private static final String TAG = "CircleRecyclerView"; + private static final int DEFAULT_SELECTION = Integer.MAX_VALUE >> 1; private boolean mIsForceCentering; @@ -83,6 +87,9 @@ else if (layoutManager.canScrollVertically()) setClipChildren(false); mCurrentCenterChildView = findViewAtCenter(); smoothScrollToView(mCurrentCenterChildView); + } else { + setClipToPadding(false); + setClipChildren(false); } if (mCurrentCenterChildView != null) @@ -114,6 +121,26 @@ protected void onScrollChanged(int l, int t, int oldl, int oldt) { mOnScrollListener.onScrollChanged(l, t, oldl, oldt); } + @Override + public void requestLayout() { + super.requestLayout(); + + if (mViewMode != null && getLayoutManager() != null) { + int count = getLayoutManager().getChildCount(); + for (int i = 0; i < count; ++i) { + View v = getChildAt(i); + if (v != mCurrentCenterChildView && mCenterItemClickListener != null) + v.setOnClickListener(null); + if (v == mCurrentCenterChildView) + v.setTag(R.string.tag_is_center, true); + else + v.setTag(R.string.tag_is_center, false); + mViewMode.applyToView(v, this); + } + } + + } + public void smoothScrollToView(View v) { int distance = 0; if (getLayoutManager() instanceof LinearLayoutManager) {