gpt4 book ai didi

android - 如何刷新 RecyclerView + PagedListAdapter 并滚动到顶部?

转载 作者:行者123 更新时间:2023-12-02 14:56:15 26 4
gpt4 key购买 nike

我有一个使用 PagedListAdapterRecyclerView。我想刷新列表(即从我的 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) 但没有骰子。无论如何,列表都会刷新但不会滚动到顶部。我该怎么做?

最佳答案

尝试使用以下代码滚动到顶部:

pagedListAdapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() {
override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
if (positionStart == 0) {
manager.scrollToPosition(0)
}
}
})

关于android - 如何刷新 RecyclerView + PagedListAdapter 并滚动到顶部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55961625/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com