Как указать классу RecyclerView.Adapter начальное состояние?

Активити содержит RecyclerView. Данные в ArrayList. ArrayList содержит несколько сотен элементов. RecyclerView.Adapter подключает ArrayList к RecyclerView. При запуске активити на экране я вижу вертикальный список элементов из ArrayList. Самым верхним элементом экрана является самый первый элемент массива. Мне нужно добиться, чтобы при открытии активити RecyclerView сразу выводил самым верхним не первый элемент массива, а другой(например 50-й). Подскажите, как этого можно добиться?


Ответы (1 шт):

Автор решения: Cypher

Используйте RecyclerView.scrollToPosition(). Например у нас есть 10 элементов и нам надо открывать на пятом:

ezgif-com-gif-maker-1.gif

Activity:

class ScrollToPosActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_scroll_to_pos)

    recycler_view.adapter = ScrollToPosAdapter(getDates())
    recycler_view.scrollToPosition(5)
}

private fun getDates() = listOf("1", "2", "3", "4", "5", "6", "7", "8", "9", "10")
}

Adapter:

class ScrollToPosAdapter(private val dates: List<String>) :
RecyclerView.Adapter<ScrollToPosAdapter.ScrollToPosViewHolder>() {

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ScrollToPosViewHolder(
    LayoutInflater.from(parent.context).inflate(R.layout.item_main, parent, false)
)

override fun onBindViewHolder(holder: ScrollToPosViewHolder, position: Int) {
    holder.text.text = dates[position]
}

override fun getItemCount() = dates.size

class ScrollToPosViewHolder(view: View) : RecyclerView.ViewHolder(view) {
    val text: TextView = view.title
}
}
→ Ссылка