Phi*_*lly 6 android android-recyclerview android-paging
我有一个RecyclerView正在使用PagedListAdapter. 我想刷新列表(即从 my 中获取数据DataSource)并自动滚动到顶部。
这是我的 RecyclerView:
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Run Code Online (Sandbox Code Playgroud)
val adapter by lazy {
DiscoveryListAdapter(activity)
}
Run Code Online (Sandbox Code Playgroud)
recyclerView.let {
it.adapter = adapter
it.layoutManager = LinearLayoutManager(activity)
}
Run Code Online (Sandbox Code Playgroud)
这是我的适配器:
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
}
}
Run Code Online (Sandbox Code Playgroud)
我正在像这样构建 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()
}
Run Code Online (Sandbox Code Playgroud)
我正在使用这一行来刷新列表:
adapter.currentList?.dataSource?.invalidate()
Run Code Online (Sandbox Code Playgroud)
这似乎正确刷新,但它使列表滚动到一半。从那里我不知道如何让 recyclerview 返回到列表的顶部。我试过了,recyclerView.scrollToPosition(0)但没有骰子。无论如何,列表会刷新但不会滚动到顶部。我该怎么做呢?
use*_*217 11
尝试使用以下代码滚动到顶部:
pagedListAdapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() {
override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
if (positionStart == 0) {
manager.scrollToPosition(0)
}
}
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1629 次 |
| 最近记录: |