RecyclerView适配器上notifyDataSetChanged不更新()(未收集)

问题描述 投票:0回答:2

这是我第一次碰到这种时候它不是关于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不适配器更改或更新 - 我检查它在调试 - 它不会改变。

我怎么能解决这个问题,请

android kotlin android-recyclerview recycler-adapter
2个回答
0
投票

不要从UI线程调用notifyDataSetChanged()。


0
投票

我不熟悉这个主持人,但你的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()

© www.soinside.com 2019 - 2024. All rights reserved.