小编Fil*_*icz的帖子

DiffUtil违反areContentTheSame的合同

最近,我在我的应用程序中发现了奇怪的崩溃。我发现它们是由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

5
推荐指数
1
解决办法
376
查看次数