这是我第一次碰到这种时候它不是关于ArrayList中,列表,或任何类型的集合 - 这是关于诠释。
我使用科特林和莫西的演示初始化适配器。以下是我Init这:
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)
}
}
}
所以,当我改变chosenPosition场在我的演示,并呼吁adapter?.notifyDataSetChanged()
- chosenPosition不适配器更改或更新 - 我检查它在调试 - 它不会改变。
我怎么能解决这个问题,请
不要从UI线程调用notifyDataSetChanged()。
我不熟悉这个主持人,但你的chosenPosition不会不会改变。您已经创建了适配器后,它并没有改变。您需要功能更新
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()