【发布时间】:2021-09-18 13:39:03
【问题描述】:
我在 Github 有以下项目:https://github.com/AliRezaeiii/News-Cache
首先我在 Fragment 中加载数据,显示来自数据库的数据,然后开始从 API 加载数据。从 API 加载完成后,我会更新数据库,并且 Fragment 中的 recyclerView 也会更新。
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel.news.observe(viewLifecycleOwner, Observer<List<Article>> { articles ->
articles?.apply {
viewModelAdapter.submitList(articles)
}
})
}
这是我的适配器:
class NewsAdapter(val callback: OnClickListener) : ListAdapter<Article, NewsAdapter.NewsViewHolder>(DiffCallback) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = NewsViewHolder.from(parent)
override fun onBindViewHolder(holder: NewsViewHolder, position: Int) {
holder.bind(getItem(position), callback)
}
/**
* Allows the RecyclerView to determine which items have changed when the [List] of [Article]
* has been updated.
*/
companion object DiffCallback : DiffUtil.ItemCallback<Article>() {
override fun areItemsTheSame(oldItem: Article, newItem: Article): Boolean {
return oldItem.url == newItem.url
}
override fun areContentsTheSame(oldItem: Article, newItem: Article): Boolean {
return oldItem == newItem
}
}
}
当新数据从 API 到达时,我想滚动到 RecyclerView 的顶部:
handler.postDelayed({
binding.recyclerView.scrollToPosition(0)
}, 1000)
问题是当我转到详细信息屏幕并导航回主屏幕时,onActivityCreated 和 onCreateView 被调用,结果binding.recyclerView.scrollToPosition(0) 也被调用,这不是我想要的。
API 有新数据到达时,滚动到 RecyclerView 顶部的解决方案是什么?
【问题讨论】:
-
所以当您从另一个活动/片段返回到它时,您希望 recyclerview 保持在相同的滚动位置?
-
不,当新项目从 API 到达时,我想滚动到位置 0。当我回到主要片段时,保持在同一位置。
标签: android android-recyclerview