У меня есть RecyclerView
, который использует PagedListAdapter
. Я хочу обновить список (т.е. получить данные из моего DataSource
) и автоматически прокрутить вверх.
Вот мой RecyclerView:
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
val adapter by lazy {
DiscoveryListAdapter(activity)
}
recyclerView.let {
it.adapter = adapter
it.layoutManager = LinearLayoutManager(activity)
}
Вот мой адаптер:
class DiscoveryListAdapter() : PagedListAdapter<Discovery, DiscoveryListItemViewHolder>(DiscoveryDiffCallback()) {
@SuppressLint("CheckResult")
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DiscoveryListItemViewHolder {
//Extension function
val view = parent.inflate(R.layout.discovery_detail_list_item)
return DiscoveryListItemViewHolder(view)
}
override fun onBindViewHolder(viewHolder: DiscoveryListItemViewHolder, position: Int) {
getItem(position)?.let {
viewHolder.populateFrom(it)
}
}
class DiscoveryDiffCallback : DiffUtil.ItemCallback<Discovery>() {
override fun areItemsTheSame(one: Discovery, two: Discovery) =
one == two
override fun areContentsTheSame(one: Discovery, two: Discovery) =
one == two
}
}
Я создаю PagedList таким образом, подписываясь на возвращаемый объект LiveData и вызывая submitList
на адаптере:
fun buildLivePagedList(): LiveData<PagedList<Discovery>> {
val config = PagedList.Config.Builder()
.setPageSize(PAGE_SIZE)
.setEnablePlaceholders(false)
.setPrefetchDistance(PAGE_SIZE * 2)
.build()
val factory = DiscoveryListDataSourceFactory()
return LivePagedListBuilder(factory, config).build()
}
Я использую эту строку для обновления списка:
adapter.currentList?.dataSource?.invalidate()
Кажется, это правильно обновляется, но оставляет список прокручиваемым наполовину вниз. Оттуда я не знаю, как заставить recyclerview вернуться в начало списка. Я пробовал recyclerView.scrollToPosition(0)
, но не в кости. Несмотря ни на что, список обновляется, но не прокручивается вверх. Как мне это сделать?