Адаптер RecyclerView не обновляется в notifyDataSetChanged () (не в коллекции) - PullRequest
0 голосов
/ 08 февраля 2019

Впервые я сталкиваюсь с этим, когда речь идет не о 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)
            }
        }
}

, поэтому, когда я меняю поле selectedPosition в моем Presenter и вызываю adapter?.notifyDataSetChanged() - selectedPosition не изменяетсяили обновить в адаптере - я проверил в отладке - он не меняется.

Как это исправить, пожалуйста

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Выполните вызов notifyDataSetChanged () из потока пользовательского интерфейса.

0 голосов
/ 08 февраля 2019

Я не знаком с этим докладчиком, но выбранная вами позиция не меняется.Он не меняется после того, как вы создали свой адаптер.Вам нужна функция для обновления

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 ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...