简体   繁体   English

RecyclerViewAdapter 出现 ArrayList 运行时错误

[英]RecyclerViewAdapter with ArrayList runtime error

I've been getting into android studio lately and I am having a problem with the RecyclerViewAdapter.我最近一直在进入 android 工作室,我遇到了 RecyclerViewAdapter 的问题。 I have tried using List which does work, but does not allow me to remove or add items in that list.我尝试使用确实有效的List ,但不允许我删除或添加该列表中的项目。 Is there a way to solve this or should I use a ViewModel for that instead?有没有办法解决这个问题,或者我应该改用 ViewModel 吗?

My relevant code:我的相关代码:

class recycledViewAdapter(private var itemmodellist: ArrayList<recycledviewitemmodel>): RecyclerView.Adapter<recycledViewAdapter.recycledViewHolder>() {

val recycledview = binding.recycledview
val list: ArrayList<recycledviewitemmodel> = ArrayList()
for  (i in 1..10){
    list.add(recycledviewitemmodel("item " + i.toString()))
}
val adapter  = recycledViewAdapter(list)
recycledview.adapter = adapter
recycledview.layoutManager = LinearLayoutManager(this)

Error:错误:

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)

Please name all classes starting with a capital letter, and using camel case, for example:请以大写字母开头并使用驼峰命名所有类,例如:

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

After renaming the classes clean and rebuild the project.重命名类后清理并重建项目。

Firstly, lists are immutable data types(read-mode only), if you want to add/remove elements you should use mutableList.首先,列表是不可变数据类型(仅限读取模式),如果你想添加/删除元素,你应该使用 mutableList。

Secondly, you should declare the list inside the adapter and use a method to update it.其次,您应该在适配器内部声明列表并使用一种方法来更新它。

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

And you should initialize it as:你应该将它初始化为:

 val adapter = RecycledViewAdapter()

Now you can update the content list whenever you want without instantiating the adapter.现在您可以随时更新内容列表,而无需实例化适配器。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在另一个 Activity 中使用 RecyclerViewAdapter 的 ArrayList - Use ArrayList of a RecyclerViewAdapter in another Activity RecyclerViewAdapter 的 onBindViewHolder() 出错 - Error in RecyclerViewAdapter's onBindViewHolder() RecyclerViewAdapter的onBindViewHolder()方法中的错误 - Error in RecyclerViewAdapter's onBindViewHolder() Method RecyclerViewAdapter中的itemview可能不是null错误 - itemview may not be null error in RecyclerViewAdapter 作为Interface中的参数的Arraylist在Android RecyclerViewAdapter中出现NullPointer Exception - Arraylist as argument in Interface occur NullPointer Exception in Android RecyclerViewAdapter 错误:lateinit 属性 recyclerViewAdapter 尚未初始化 - Error: lateinit property recyclerViewAdapter has not been initialized RecyclerViewAdapter上的SwitchCompat - SwitchCompat on RecyclerViewAdapter 非运行时分配解决方案-ArrayList - Non runtime allocation solution - ArrayList 使用bundle,seListAdapter运行时错误将ArrayList从片段传递到另一个片段(扩展ListFragment) - Pass ArrayList from fragment to another fragment(extends ListFragment) using bundle, seListAdapter runtime error 我在使用RecyclerViewAdapter在GridLayout中显示SQLite数据时遇到错误 - I am getting error while displaying SQLite data in GridLayout using RecyclerViewAdapter
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM