在从Firebase存储中获取所有数据之前,我的Recyclerview无法滚动

时间:2020-04-23 05:28:27

标签: android firebase android-recyclerview firebase-storage

我在这里演示我的问题

首先,我的应用程序使用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
    }

使用viewmodel获取数据

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>

2 个答案:

答案 0 :(得分:1)

您可以尝试使用测试列表数据,而不是使用Firebase存储,如果问题仍然存在,请说明Firebase存储是否有效

答案 1 :(得分:0)

我只是简单地通过将recyclerview包装到nestScrollview来解决此问题,但它确实有效(但是在同时滚动并获取数据时确实滞后,这是不可接受的)。 我真的不知道为什么在这种情况下为什么recyclerview滚动行为如此。