kotlin 具有ArrayList运行时错误的RecyclerViewAdapter

3lxsmp7m  于 2022-12-13  发布在  Kotlin
关注(0)|答案(2)|浏览(144)

我最近进入android studio,我遇到了一个关于RecyclerViewAdapter的问题。我试过使用List,它可以工作,但是不允许我在列表中删除或添加项目。有没有办法解决这个问题,或者我应该使用ViewModel来代替?
我的相关代码:
第一个
错误:

Process: com.example.recycleview, PID: 6955
    java.lang.NoSuchMethodError: No direct method <init>(Ljava/util/List;)V in class Lcom/example/recycleview/recycledViewAdapter; or its super classes (declaration of 'com.example.recycleview.recycledViewAdapter' appears in /data/data/com.example.recycleview/code_cache/.overlay/base.apk/classes4.dex)
        at com.example.recycleview.MainActivity.onCreate(MainActivity.kt:25)
        at android.app.Activity.performCreate(Activity.java:8290)
        at android.app.Activity.performCreate(Activity.java:8269)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1384)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3657)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3813)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2308)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loopOnce(Looper.java:201)
        at android.os.Looper.loop(Looper.java:288)
        at android.app.ActivityThread.main(ActivityThread.java:7898)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
t98cgbkg

t98cgbkg1#

请以大写字母开头并使用驼峰式大小写来命名所有类,例如:

class RecycledViewAdapter(
  private var itemModelList: ArrayList<RecycledViewItemModel>
) : RecyclerView.Adapter<RecycledViewAdapter.RecycledViewHolder>() { ... }

重命名类后,清理并重新生成项目。

w9apscun

w9apscun2#

首先,列表是不可变的数据类型(仅读模式),如果你想添加/删除元素,你应该使用mutableList。
其次,您应该在配接器内宣告清单,并使用方法来更新它。

class RecycledViewAdapter(): RecyclerView.Adapter<recycledViewAdapter.recycledViewHolder>() {
    var itemList = listOf<RecycledVieWithModel>()
...
    fun updateAdapter(newList: List<RecycledVieWithModel>){
      itemList = newList.toList()
      notifyDataSetChanged()
    }
...
}

您应该将其初始化为:

val adapter = RecycledViewAdapter()

现在,您可以随时更新内容列表,而无需示例化适配器。

adapter.updateAdapter(listOf()) // your elements

相关问题