将RecyclerView与FirestoreRecyclerAdapter一起使用时如何设置滚动位置?

时间:2018-07-10 12:41:33

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

我正在使用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()方法中指定的第十个位置。

我也使用过:

recyclerView.scrollToPosition(10);

recyclerView.smoothScrollToPosition(10);

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

3 个答案:

答案 0 :(得分:1)

而不是使用recyclerView.scrollToPosition(10);来尝试使用以下代码在recyclerview中设置位置

recyclerView.smoothScrollToPosition(10);

答案 1 :(得分:0)

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

答案 2 :(得分:0)

就我而言,我不想移动到特定位置,而是只想在从不同的 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