【发布时间】:2020-09-02 19:08:36
【问题描述】:
我正在使用 FirestorePagingAdapter 使用来自 Firestore 查询的数据填充 RecyclerView。每次用户使用 SwipeRefreshLayout 刷新数据或使用简单的搜索功能时,RecyclerView 都会闪烁以更新内容。我希望我可以删除谁的闪烁,以便已经加载/缓存的数据保持不变。
我试图删除 RecyclerView 动画,但它只是加快了这些闪烁。我想我应该使用 onDataSetChanged() 实现 DataSnapshotListener 来监听更新并防止适配器更新视图。但我找不到合适的解决方案。
我以这种方式刷新内容:
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
Adapter.refresh();
}
});
我使用查询更新来实现搜索功能:
private void listSearch (String searchText) {
String newSearch = searchText.toLowerCase();
Query searchQuery = Reference.whereGreaterThanOrEqualTo("title", newSearch);
FirestorePagingOptions<Adapter> searchOptions = new FirestorePagingOptions.Builder<Adapter>().setLifecycleOwner(this).setQuery(searchQuery, pagerConfig, Adapter.class).build();
Adapter.updateOptions(searchOptions);
}
编辑:我尝试在 getItemId() 中使用 Firestore 中的文档 ID。但没有成功。在我的数据库中创建了一个具有长属性的新字段。并尝试使用它。再次没有成功。 (
@Override
public long getItemId(int position) {
DocumentSnapshot snapshot = getItem(position);
assert snapshot != null;
Long order = snapshot.getLong("order");
return order;
}
【问题讨论】:
标签: android android-recyclerview google-cloud-firestore