Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

数据源为List时,调用add方法程序闪退 #3823

Closed
wxw-9527 opened this issue Nov 30, 2023 · 1 comment
Closed

数据源为List时,调用add方法程序闪退 #3823

wxw-9527 opened this issue Nov 30, 2023 · 1 comment

Comments

@wxw-9527
Copy link

如题,数据源为List类型时,直接调用add方法添加新数据,程序报异常
FATAL EXCEPTION: main
Process: com.chad.baserecyclerviewadapterhelper, PID: 6013
java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(AbstractList.java:161)
at com.chad.library.adapter4.BaseQuickAdapter.removeAt(BaseQuickAdapter.kt:634)
at com.chad.baserecyclerviewadapterhelper.activity.itemclick.ItemClickActivity.onCreate$lambda$6(ItemClickActivity.kt:69)
at com.chad.baserecyclerviewadapterhelper.activity.itemclick.ItemClickActivity.$r8$lambda$N5IZmXMy-dmWH7oJn-Jo3dOV9ho(Unknown Source:0)
at com.chad.baserecyclerviewadapterhelper.activity.itemclick.ItemClickActivity$$ExternalSyntheticLambda6.onItemClick(Unknown Source:0)
at com.chad.library.adapter4.BaseQuickAdapter.onItemChildClick(BaseQuickAdapter.kt:394)
at com.chad.library.adapter4.BaseQuickAdapter.bindViewClickListener$lambda$10$lambda$9$lambda$8(BaseQuickAdapter.kt:346)
at com.chad.library.adapter4.BaseQuickAdapter.$r8$lambda$ccaijNo-c5lRG10m3T_rMqaIOnE(Unknown Source:0)
at com.chad.library.adapter4.BaseQuickAdapter$$ExternalSyntheticLambda2.onClick(Unknown Source:4)
at android.view.View.performClick(View.java:7380)
at android.view.View.performClickInternal(View.java:7342)
at android.view.View.access$3900(View.java:824)
at android.view.View$PerformClick.run(View.java:28262)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:238)
at android.app.ActivityThread.main(ActivityThread.java:7827)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:995)

复现方法:
ItemClickActivity中,将数据源改为以下代码:

// 创建数据
        val data = listOf(
                    ClickEntity(ClickEntity.CLICK_ITEM_VIEW),
                    ClickEntity(ClickEntity.CLICK_ITEM_CHILD_VIEW),
                    ClickEntity(ClickEntity.LONG_CLICK_ITEM_VIEW),
                    ClickEntity(ClickEntity.LONG_CLICK_ITEM_CHILD_VIEW),
        )
        // 创建Adapter
        ItemClickAdapter(data)

调用add方法添加数据可复现

@limuyang2 limuyang2 added bug and removed bug labels Dec 1, 2023
@limuyang2
Copy link
Collaborator

limuyang2 commented Dec 1, 2023

listOf 创建的是 java.util.Collections.singletonList(element)

SingletonList<> 根据官方注释如下:

Returns an immutable list containing only the specified object.
The returned list is serializable.

这是一个不可变化的列表,所以操作的时候,会抛出 UnsupportedOperationException 异常。

如果你已经确定了列表数据的不可变化特性,那么用 listOf 没有问题,操作数据抛出异常是对开发者的一种强制警告,符合设计逻辑。

如果你的列表数据是可以变化的,你应该使用 arrayListOf

开发者应自己确定数据列表是否可变,并显示的使用不同 list 类型

@wxw-9527 wxw-9527 closed this as completed Dec 1, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants