将 RecyclerView 与 FirestoreRecyclerAdapter 一起使用时如何设置滚动位置?
Posted
技术标签:
【中文标题】将 RecyclerView 与 FirestoreRecyclerAdapter 一起使用时如何设置滚动位置?【英文标题】:How to set scroll position when using RecyclerView with 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
中仍然没有任何项目,您应该在recyclerView
从Firebase
填充之后使用该代码,可能在回调中
@Signo 是我目前在网上看到的最合理的解释。谢谢你,但我应该将这些代码行移到我的适配器类中还是?
【参考方案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)
)
这里listAdapter
是FirestoreRecyclerAdapter
。
注意:这样做肯定会产生一些负面影响。
【讨论】:
以上是关于将 RecyclerView 与 FirestoreRecyclerAdapter 一起使用时如何设置滚动位置?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 videoView 与 imageView 和 recyclerView 一起制作动画?
将 RecyclerView 与 FirestoreRecyclerAdapter 一起使用时如何设置滚动位置?
Android - 将视图中心与 RecyclerView 中最后一个孩子的中心对齐
Recyclerview:如何将一些帖子与图像和没有图像混合? [复制]