Android RecyclerView Adapter 问题:notifyDataSetChanged 无法正常工作

问题描述

我有一个带有 NavigationView 的简单笔记应用程序,我可以在我的 RecyclerView 适配器从使用 linearlayoutmanager 的 NoteRecyclerViewAdapter 到使用 GridLayoutManager 的 CourseRecyclerViewAdapter 之间切换。两个适配器都从单例对象 DataManager 及其属性(课程、笔记)中获取数据

我最初将 listItems(一个 RecyclerView)设置为 NoteRecyclerAdapter 以显示注释。

private val noteLayoutManager by lazy { linearlayoutmanager(this) }
private val noteRecyclerAdapter by lazy { NoteRecyclerAdapter(this,DataManager.notes) }
private val courseLayoutManager by lazy { GridLayoutManager(this,2) }
private val courseRecyclerAdapter by lazy { CourseRecyclerAdapter(this,DataManager.courses) 
}

我覆盖了 onNavigationItemSelected 函数以在 NoteRecyclerAdapterCourseRecyclerAdapter 之间切换

override fun onNavigationItemSelected(item: MenuItem): Boolean {
    when (item.itemId) {
        R.id.nav_notes -> {
            displayNotes()
        }
        R.id.nav_courses -> {
            displayCourses()
        }
    }
    findViewById<DrawerLayout>(R.id.drawer_layout).closeDrawer(GravityCompat.START)
    return true
}
private fun displayNotes() {
    listItems.layoutManager = noteLayoutManager
    listItems.adapter = noteRecyclerAdapter
    findViewById<NavigationView>(R.id.nav_view).menu.findItem(R.id.nav_notes).isChecked = 
true
}
private fun displayCourses() {
    listItems.layoutManager = courseLayoutManager
    listItems.adapter = courseRecyclerAdapter
    findViewById<NavigationView>(R.id.nav_view).menu.findItem(R.id.nav_courses).isChecked = 
true
}

我有向 DataManager 添加新笔记以及新课程的功能。因为那些添加函数是在 ItemsActivity 之外处理的,listItem 在其中初始化,所以我在 notifyDataSetChanged()

中设置了一个 onResume()
override fun onResume() {
    super.onResume()
    listItems.adapter?.notifyDataSetChanged()
    Log.i(this::class.simpleName,"onResume")
}

所以,问题来了:RecyclerView listItems 将被通知、刷新并仅显示最近添加的注释。但不适用于添加的课程;我查了单例DataManager,新笔记和新课都添加没有问题。 我做了一些调试,我发现只有当我将应用程序按回主页并返回应用程序时,即再次 onCreate 之后,它才会收到通知并刷新。 我是 android 开发的新手,任何帮助将不胜感激。 New Note is added is shown at the bottom,no problem New Course added is not shownOnly after being destroyed and created again,it shows

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...