最近,我在我的应用程序中发现了奇怪的崩溃。我发现它们是由ListAdapter-> DiffUtil下方引起的。合同规定,areContentsTheSame只有在对应项目areItemsTheSame返回true时,才会调用回调。问题是,areContentsTheSame被称为该项目areItemsTheSame从未被调用。
我正在对String产品进行测试,因此它不应与自己的回收器实施相关。如果是我的错(现在几乎没有逻辑)或DiffUtil工具中的错误,我真的很困惑
我已经创建了一个简单的仪器化测试,但在上述情况下失败了-更有经验的人可以看看一下:
package com.example.diffutilbug
import android.util.Log
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import junit.framework.Assert.assertTrue
import kotlinx.coroutines.*
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.BlockJUnit4ClassRunner
@RunWith(BlockJUnit4ClassRunner::class)
internal class ExampleUnitTest {
@Test
fun testDiffUtil4() {
val handler = CoroutineExceptionHandler { _, exception ->
throw exception
}
// adapter compare items :
// areItemsTheSame -> compare length of String
// areContentsTheSame -> …Run Code Online (Sandbox Code Playgroud) android listadapter android-support-library recycler-adapter androidx