【问题标题】:How to set scroll position when using RecyclerView with FirestoreRecyclerAdapter?将 RecyclerView 与 FirestoreRecyclerAdapter 一起使用时如何设置滚动位置?
【发布时间】:2018-12-18 07:36:15
【问题描述】:

我正在使用RecyclerView 来显示来自 Firestore 数据库的一些数据。我将FirestoreRecyclerAdapter用作适配器,原因很明显。我在RecyclerView 中成功显示了所有 35 个项目。问题是,我无法滚动到特定位置。这是我尝试过的:

recyclerView = locationsFragmentView.findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(context));

FirestoreRecyclerOptions<MyModelClass> options = new FirestoreRecyclerOptions.Builder<MyModelClass>().setQuery(query, MyModelClass.class).build();
adapter = new MyFirestoreRecyclerAdapter(options);
recyclerView.setAdapter(adapter);
recyclerView.setHasFixedSize(false);
recyclerView.getLayoutManager().scrollToPosition(10);

每次打开我的应用程序时,我总是位于第一个位置,而不是我在 scrollToPosition() 方法中指定的第 10 位。

我也用过:

recyclerView.scrollToPosition(10);

recyclerView.smoothScrollToPosition(10);

但没有运气。如何滚动到特定位置?谢谢!

【问题讨论】:

  • 它不会滚动,因为当您调用recyclerView.scrollToPosition(10);recyclerView 中仍然没有任何项目,您应该在recyclerViewFirebase 填充之后使用该代码,可能在回调中
  • @Signo 是我目前在网上看到的最合理的解释。谢谢你,但我应该将这些代码行移到我的适配器类中还是?

标签: android firebase android-recyclerview uiscrollview google-cloud-firestore


【解决方案1】:

不要使用recyclerView.scrollToPosition(10);,而是尝试使用下面的代码在recyclerview中设置位置

recyclerView.smoothScrollToPosition(10);

【讨论】:

  • 感谢您的回答,但似乎smoothScrollToPosition() 方法需要多个参数。
【解决方案2】:

recyclerView 不会滚动,因为当您调用 recyclerView.scrollToPosition(10); 时它仍然是空的,您应该在从 Firebase 响应中填充 recyclerView 之后移动该代码,可能在回调中。

【讨论】:

  • 我按照您在第一条评论中的建议解决了这个问题。在填充了我的 `RecyclerView 之后,我已经在回调中移动了这些代码行。请编辑您的答案,以便我接受。非常感谢!
  • @IoanaP。哦,太好了,很高兴它奏效了!不客气:)
【解决方案3】:

就我而言,我不想移动到特定位置,而只是想在从不同的 Activity 返回或从后台返回后保持原始位置。

我刚刚添加了这个空监听器,它正在工作。

 listAdapter.snapshots.addChangeEventListener(object : ChangeEventListener {
        override fun onChildChanged(
            type: ChangeEventType,
            snapshot: DocumentSnapshot,
            newIndex: Int,
            oldIndex: Int
        ) {
        }

        override fun onDataChanged() {
        }

        override fun onError(e: FirebaseFirestoreException) {
        }
    })

这里listAdapterFirestoreRecyclerAdapter

注意:这样做肯定会产生一些负面影响。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-08
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    • 2014-10-12
    • 2021-05-17
    相关资源
    最近更新 更多