繁体   English   中英

RecyclerView适配器不会在notifyDataSetChanged()(不是Collection)上更新

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM