android - kotlin notifyDataSetChanged 不更新视图
问题描述
几天前我开始使用 kotlin,但我遇到了 recyclerView 的问题。当我调用适配器的 notifyDataSetChanged 方法时,视图不会更新。(我使用了调试器,并且我的变量“usersList”已更新,但视图未更新。这是我的适配器类:
private class RankingAdapter : RecyclerView.Adapter<RankingViewHolder>() {
var usersList : MutableList<User?>? = mutableListOf()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RankingViewHolder {
val v = LayoutInflater.from(parent.context)
.inflate(R.layout.ranking_item_layout, parent,false) as LinearLayout
return RankingViewHolder(v)
}
override fun getItemCount(): Int {
return usersList?.size ?: 0
}
override fun onBindViewHolder(holder: RankingViewHolder, position: Int) {
val user : User? = usersList?.get(position)
holder.rank.text = (usersList?.indexOf(user)).toString()
holder.name.text = user?.firstName
holder.points.text = user?.score.toString()
}
fun setUsers(users : List<User?>) {
usersList?.clear()
usersList?.addAll(users)
notifyDataSetChanged()
}
}
以及调用 setUsers(users) 的方法
private fun displayRanking(users : List<User>) {
visibleLayout.visibility = View.VISIBLE
errorImageView.visibility = View.GONE
progressBar.visibility = View.GONE
val logedInUser = SaveSharedPreference.getLogedInUser(context)
userRank.text = (adapter.usersList?.indexOf(logedInUser)).toString()
userName.text = logedInUser.firstName
userPoints.text = logedInUser.score.toString()
adapter.setUsers(users)
}
解决方案
编辑1:试试这个
fun setUsers(users : List<User?>) {
usersList?.clear()
usersList?.addAll(users)
}
在哪里设置 recyclerView 适配器:
recyclerView.layoutManager = LinearLayoutManger(this, LinearLayoutManager.Vertical, false)
recyclerView.setAdapter(adapter)
在你的 displayRanking 函数中:
private fun displayRanking(users : List<User>) {
visibleLayout.visibility = View.VISIBLE
errorImageView.visibility = View.GONE
progressBar.visibility = View.GONE
val logedInUser = SaveSharedPreference.getLogedInUser(context)
userRank.text = (adapter.usersList?.indexOf(logedInUser)).toString()
userName.text = logedInUser.firstName
userPoints.text = logedInUser.score.toString()
adapter.setUsers(users)
adapter.notifyDataSetChanged()
}
在调用adapter.setUsers(users)并删除 Adapter 类中的 notifyDataSetChanged()后,尝试在displayRanking 函数中调用 adapter.notifyDataSetChanged() 。
推荐阅读
- linux - 从 Linux 中的给定文件中导出特定部分
- reactjs - Reactjs 在现有状态转换期间无法更新
- vi - Vi 编辑器突然无法正常工作
- azure - Terraform 在后续的“应用”中删除 Azure 资源,而无需更改任何配置
- c++ - 无法将可执行文件与 CMake 静态链接
- ios - 在 Virtual Box 上运行的 macOS 上运行“颤振设备”后,未检测到我的物理 iOS 设备
- swagger - 在 APIRAY 蓝图和 Swagger 之间切换
- flutter - 使用 Cubit 状态管理 Flutter sqflite red 查询报错
- c# - 将 Emptyvalue 属性添加到 Query 参数以生成开放 api yaml
- javascript - 获取当前元素(JavaScript 中的内联函数)?