nay*_*rde 2 android kotlin android-recyclerview android-architecture-components
我在实时数据的开头获取了包含新项的新列表,然后使用其数据更新适配器
viewModel.myLiveData.observe { this, Observer { myList ->
adapter.submitList(myList)
recyclerView.scrollToPosition(0)
}
Run Code Online (Sandbox Code Playgroud)
The*_*eme 11
submitList它是在后台线程上工作的,所以总会存在无法解决延迟的竞争条件。幸运的是,RecyclerView.AdapterDataObserver当列表计算完成时,我们可以使用回调来通知:
yourRecyclerViewAdapter.registerAdapterDataObserver(object: RecyclerView.AdapterDataObserver() {
override fun onChanged() {
recycler_view_list.scrollToPosition(0)
}
override fun onItemRangeRemoved(positionStart: Int, itemCount: Int) {
recycler_view_list.scrollToPosition(0)
}
override fun onItemRangeMoved(fromPosition: Int, toPosition: Int, itemCount: Int) {
recycler_view_list.scrollToPosition(0)
}
override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
recycler_view_list.scrollToPosition(0)
}
override fun onItemRangeChanged(positionStart: Int, itemCount: Int) {
recycler_view_list.scrollToPosition(0)
}
override fun onItemRangeChanged(positionStart: Int, itemCount: Int, payload: Any?) {
recycler_view_list.scrollToPosition(0)
}
})
viewModel.myLiveData.observe { this, Observer { myList ->
adapter.submitList(myList)
}
Run Code Online (Sandbox Code Playgroud)
使用这种方式
viewModel.myLiveData.observe { this, Observer { myList ->
adapter.submitList(myList) // Assuming you are notifying adapter by notifydatasetchanged()
recyclerView.post { recyclerView.scrollToPosition(0) }
}
Run Code Online (Sandbox Code Playgroud)
这里post给 UI 线程一些时间来用新数据填充 Recycler,然后调用scrollToPosition.
| 归档时间: |
|
| 查看次数: |
1574 次 |
| 最近记录: |