diff --git a/demo/build.gradle b/demo/build.gradle index 1f324f6..0701188 100644 --- a/demo/build.gradle +++ b/demo/build.gradle @@ -17,6 +17,7 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + buildToolsVersion '26.0.2' } dependencies { @@ -30,5 +31,4 @@ dependencies { implementation project(':leftsection') implementation 'com.github.bumptech.glide:glide:4.6.1' annotationProcessor 'com.github.bumptech.glide:compiler:4.6.1' - } diff --git a/demo/src/main/java/estar/leftsectionrecyclerview/TestActivity.java b/demo/src/main/java/estar/leftsectionrecyclerview/TestActivity.java index 8866b02..11d4c7c 100644 --- a/demo/src/main/java/estar/leftsectionrecyclerview/TestActivity.java +++ b/demo/src/main/java/estar/leftsectionrecyclerview/TestActivity.java @@ -32,6 +32,9 @@ protected void onCreate(Bundle savedInstanceState) { List list = new ArrayList<>(); list.add(new ImageInfo(true, "图组1")); + list.add(new ImageInfo(false, "图组1")); + list.add(new ImageInfo(false, "图组1")); + list.add(new ImageInfo(true, "图组2")); list.add(new ImageInfo(false, "图组1")); list.add(new ImageInfo(false, "图组1")); diff --git a/leftsection/src/main/java/estar/leftsection/SectionItemDecoration.java b/leftsection/src/main/java/estar/leftsection/SectionItemDecoration.java index c3b11ea..db9dd8c 100644 --- a/leftsection/src/main/java/estar/leftsection/SectionItemDecoration.java +++ b/leftsection/src/main/java/estar/leftsection/SectionItemDecoration.java @@ -180,15 +180,17 @@ public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { if (isC) { for (int i1 = position + 1; i1 < adapter.getItemCount(); i1++) { if (adapter.getItem(i1).isSection()) { - int index = i1 - firstVisibleItem - 1; - if (index < 0) { - index = 0; - } - if (index <= lastVisibleItem) { - bottom = parent.getChildAt(index).getBottom() + dex4S; + + View view = parent.getLayoutManager().findViewByPosition(i1 - 1); + if (view != null) { + bottom = view.getBottom() + dex4S; } - if (bottom < top&&bottom!=0) { - bottom = parent.getChildAt(index + 1).getBottom() + dex4S; + + if (bottom < top && bottom != 0) { + view = parent.getLayoutManager().findViewByPosition(i1); + if (view != null) { + bottom = view.getBottom() + dex4S; + } } break; @@ -205,7 +207,6 @@ public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { Rect rect = new Rect(left, top, right, bottom); - RectF rectF = new RectF(rect); c.drawRect(rectF, paint); @@ -250,7 +251,7 @@ public void getItemOffsets(Rect outRect, View view, RecyclerView parent, Recycle int top = 0; int left = 0; int right = 0; - if (position > 0 && adapter.getItem(position - index).isSection()) { + if (adapter.getItem(position - index).isSection()) { top = (int) this.decTopMargin; }