Это потому, что в представлениях переработчика не все завышенные представления, а только видимые.Это по замыслу и не должно быть возиться с.Лично я думаю, что вы должны использовать функцию утилизации.
Вам нужно сделать выбранное состояние частью вашей модели в адаптере - элементы в адаптере.Допустим, это называется RowItem
, поэтому в вашем адаптере у вас будет список RowItem
s, например.Помимо текста на обоих языках, вам также необходимо добавить выбранное состояние.Тогда нужно просто получить адаптер списка, установить правильное положение для выбранного и отменить выбор нужного.
Например, в вашем адаптере:
fun select(position: Int) {
data[position].selected = true
notifyItemChanged(position)
// deselect all other positions that you don't want selected
}
Когда вы связываетеДержатель просмотра вы можете сделать тогда:
public void onBindViewHolder(ViewHolder viewHolder, int position) {
val item = data[position]
viewHolder.itemView.selected = item.selected
// take care of the rest of the views
}
данные будут список, где вы храните RowItem
s
Теперь вы можете без проблем прокручивать и установитьпредмет для выбранного.Как только представление станет видимым в представлении утилизатора, адаптер установит правильное состояние.
Справедливо сказать, что я немного догадываюсь, поскольку в вашем вопросе нет кода адаптера, но идея, которую я думаю, простачтобы понять.Вам нужно изменить состояние в адаптере и позволить реализации представления переработчика справиться с этим за вас.В конце концов, цель состоит в том, чтобы заставить представление переработчика перерабатывать ваши представления на основе моделей, адаптированных адаптером.
Помните, что вы всегда можете получить свой адаптер из самого представления переработчика.В конце вы можете сделать что-то вроде этого:
...
0 -> {
recyclerView.smoothScrollToPosition(0)
(recyclerView.adapter as MyAdapter).select(0)
}
Здесь MyAdapter
будет именем класса вашего адаптера
Для прокрутки вы можете взятьвзгляд на это