问题描述
我有一个带有 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
函数以在 NoteRecyclerAdapter
和 CourseRecyclerAdapter
之间切换
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 (将#修改为@)