From d2685552a120b5b2654a2e7b1903171d39c553d9 Mon Sep 17 00:00:00 2001 From: pokercc Date: Mon, 22 Nov 2021 15:49:33 +0800 Subject: [PATCH] Fix stickyHeader flash when call notifyDataSetChange. --- .../sample/changeadapter/ChangeAdapterActivity.kt | 10 ++++++---- build.gradle | 2 +- expandableRecyclerView/build.gradle | 2 +- .../android/expandablerecyclerview/StickyHeader.kt | 13 +++++++++---- gradle/wrapper/gradle-wrapper.properties | 2 +- 5 files changed, 18 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/pokercc/android/expandablerecyclerview/sample/changeadapter/ChangeAdapterActivity.kt b/app/src/main/java/pokercc/android/expandablerecyclerview/sample/changeadapter/ChangeAdapterActivity.kt index 6981274..4dffb2d 100644 --- a/app/src/main/java/pokercc/android/expandablerecyclerview/sample/changeadapter/ChangeAdapterActivity.kt +++ b/app/src/main/java/pokercc/android/expandablerecyclerview/sample/changeadapter/ChangeAdapterActivity.kt @@ -1,6 +1,7 @@ package pokercc.android.expandablerecyclerview.sample.changeadapter import android.animation.ObjectAnimator +import android.annotation.SuppressLint import android.content.Context import android.content.Intent import android.os.Bundle @@ -28,7 +29,7 @@ class ChangeAdapterActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(binding.root) - binding.recyclerView.adapter = CountAdapter(3, 2) + binding.recyclerView.adapter = CountAdapter(30, 5) binding.recyclerView.layoutManager = LinearLayoutManager(this) binding.changeAdapter.setOnClickListener { binding.recyclerView.adapter = CountAdapter() @@ -51,8 +52,8 @@ private class CountAdapter( ) : ExpandableAdapter() { fun setNewData() { - groupCount = Random.nextInt(1, 10) - childCount = Random.nextInt(2, 10) + groupCount = Random.nextInt(5, 10) + childCount = Random.nextInt(3, 10) notifyDataSetChanged() } @@ -84,6 +85,7 @@ private class CountAdapter( } } + @SuppressLint("SetTextI18n") override fun onBindGroupViewHolder( holder: ExpandableAdapter.ViewHolder, groupPosition: Int, @@ -92,7 +94,7 @@ private class CountAdapter( ) { if (payloads.isEmpty()) { (holder as? ParentVH)?.apply { - binding.titleText.text = (groupPosition + 1).toString() + binding.titleText.text = "Group "+(groupPosition + 1).toString() binding.arrowImage.rotation = if (expand) 0f else -90.0f } } diff --git a/build.gradle b/build.gradle index 6747166..b5bb286 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { jcenter() } dependencies { - classpath "com.android.tools.build:gradle:4.1.1" + classpath 'com.android.tools.build:gradle:7.0.3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.5' classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' diff --git a/expandableRecyclerView/build.gradle b/expandableRecyclerView/build.gradle index 67d9513..41d208e 100644 --- a/expandableRecyclerView/build.gradle +++ b/expandableRecyclerView/build.gradle @@ -1,7 +1,7 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' apply from: rootProject.file("config.gradle.kt") -apply from: rootProject.file("bintray.gradle") +//apply from: rootProject.file("bintray.gradle") android { testOptions { diff --git a/expandableRecyclerView/src/main/java/pokercc/android/expandablerecyclerview/StickyHeader.kt b/expandableRecyclerView/src/main/java/pokercc/android/expandablerecyclerview/StickyHeader.kt index 38f0a25..4a1ce3a 100644 --- a/expandableRecyclerView/src/main/java/pokercc/android/expandablerecyclerview/StickyHeader.kt +++ b/expandableRecyclerView/src/main/java/pokercc/android/expandablerecyclerview/StickyHeader.kt @@ -13,6 +13,8 @@ import androidx.recyclerview.widget.RecyclerView private const val DEBUG = false +private const val LOG_TAG = "StickyHeader" + open class StickyHeader @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 ) : FrameLayout(context, attrs, defStyleAttr) { @@ -42,6 +44,12 @@ open class StickyHeader @JvmOverloads constructor( header: View, y: Float ) { + if (DEBUG) { + Log.d( + LOG_TAG, + "onShowHeader(y:${y},header:${header},this.header:${this.header})" + ) + } if (this.header == header) { this.header?.y = y return @@ -63,9 +71,6 @@ open class StickyHeader @JvmOverloads constructor( */ private class StickyHeaderDecoration(private val onShowHeader: (View, Float) -> Unit) : RecyclerView.ItemDecoration() { - companion object { - private const val LOG_TAG = "ExpandStickyHeaderD" - } private var headerGroup = -1 @@ -88,7 +93,7 @@ private class StickyHeaderDecoration(private val onShowHeader: (View, Float) -> override fun onChanged() { super.onChanged() - header = null +// header = null } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index df62089..5979dde 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip