我在这里演示我的问题是
首先,我的应用正在使用MVVM体系结构。我有一个存储库,可从Firebase存储中获取所有列表文件
fun getRestItem(type : String) : LiveData<ArrayList<eachItem>> {
val list = ArrayList<eachItem>()
val listStream = MutableLiveData<ArrayList<eachItem>>()
storage.child(type).listAll().addOnSuccessListener {
it.items.forEach { item ->
item.downloadUrl.addOnSuccessListener { url ->
val eachItem = eachItem(url.toString())
list.add(eachItem)
listStream.value = list
}
}
}
return listStream
}
和通过视图模型获取数据
fun getItem() : LiveData<ArrayList<eachItem>> {
return drawRepository.getRestItem("Item")
}
最后,UI观察数据
model.getItem().observe(viewLifecycleOwner, Observer {
if (it != null) {
val adapter = ItemAdapter()
adapter.submitList(it)
binding.doilyRecycler.adapter = adapter
}
})
我的适配器正在使用ListAdapter类。
问题是,当我们获取数据时,recyclerview(UI)会回到顶部,并且无法向下滚动,即使我强行向下滚动,该视图也会一直回到顶部,直到存储中的所有数据被拿来。我真的不知道这里的问题,我已经使用listAdapter了很多次,以前也没有遇到过这样的问题(也许是因为Firebase存储(我获取数据的方式)?)。我看到的滚动条正在改变,而数据大小越来越大
我猜想当新数据即将来临时,recycerview会不断刷新...
你们能给我这么建议吗?
***编辑(显示我的recyclerview xml
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/doilyRecycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
app:spanCount="3"
android:clipToPadding="false"
tools:listitem="@layout/each_item"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager">
</androidx.recyclerview.widget.RecyclerView>
您可以尝试使用测试列表数据,而不是从firebase存储中使用,如果问题仍然存在,请说明firebase存储是否可用
我只是简单地解决了问题,方法是将recyclerview与nestScrollview封装在一起(它确实起作用(但是在同时滚动并获取数据时确实滞后,这是不可接受的)。我真的不知道为什么在这种情况下为什么recyclerview滚动行为如此。