![](/img/trans.png)
[英]Android RecyclerView MVVM where to update Adapter with notifyDataSetChanged
[英]RecyclerView adapter doesn't update on notifyDataSetChanged() (not Collection)
这是我第一次遇到这个问题,它与ArrayList,List或任何种类的集合无关-与Int有关。
我正在使用Kotlin和Moxy的Presenter初始化适配器。 这是我初始化的方式:
adapter = WeeksAdapter(context, weeks, chosenWeekPosition, this)
这是我的WeeksAdapter部分:
class WeeksAdapter (private val context: Context, private val weeks: ArrayList<WeekChoice>, var chosenPosition: Int, private val listener: OnCurrentWeekChangedListener):
RecyclerView.Adapter<WeeksAdapter.ViewHolder>() {
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val week = weeks[position]
holder.tv.background = context.resources.getDrawable(
if (position == chosenPosition) R.drawable.week_circle_background_active else R.drawable.week_circle_background_inactive , null)
holder.tv.setTextColor( context.resources.getColor ( if (position == chosenPosition) android.R.color.white else R.color.textColor ))
holder.tv.text = "${week.numberOfWeek}"
holder.tv.setOnClickListener {
listener.onWeekClick(position)
}
}
}
因此,当我更改Presenter中的selectedPosition字段并调用adapter?.notifyDataSetChanged()
-selectedPosition不会在适配器中更改或更新-我在调试中检查了它-不会更改。
请问我该如何解决
我不熟悉此演示者,但是您的selectedPosition不会改变。 创建适配器后,它不会更改。 您需要功能来更新它
class WeeksAdapter (private val context: Context, private val weeks: ArrayList<WeekChoice>, var chosenPosition: Int, private val listener: OnCurrentWeekChangedListener):
RecyclerView.Adapter<WeeksAdapter.ViewHolder>() {
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val week = weeks[position]
holder.tv.background = context.resources.getDrawable(
if (position == chosenPosition) R.drawable.week_circle_background_active else R.drawable.week_circle_background_inactive , null)
holder.tv.setTextColor( context.resources.getColor ( if (position == chosenPosition) android.R.color.white else R.color.textColor ))
holder.tv.text = "${week.numberOfWeek}"
holder.tv.setOnClickListener {
listener.onWeekClick(position)
}
}
fun updatePosition(newPosition: Int) {
chosenPosition = newPosition
}
}
通过此函数更新位置,然后调用适配器?.notifyDataSetChanged()
从UI线程执行对notifyDataSetChanged()的调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.