如何在FirestoreRecyclerAdapter中添加2个不同的查询?

时间:2018-05-29 18:45:34

标签: android firebase firebase-realtime-database android-recyclerview google-cloud-firestore

我有两个问题:

Query firstQuery = ref.orderBy("name", Query.Direction.ASCENDING).limit(10);
getData(firstQuery);

Query secondQuery = ref.orderBy("price", Query.Direction.ASCENDING).limit(10);
getMoreData(secondQuery);

第一种方法如下:

private void getData(Query query) {
    firestoreRecyclerOptions = new FirestoreRecyclerOptions.Builder<ModelClass>().setQuery(query, ModelClass.class).build();
    myFirestoreRecyclerAdapter = new MyFirestoreRecyclerAdapter(firestoreRecyclerOptions);
    recyclerView.setAdapter(myFirestoreRecyclerAdapter);
}

这是第二种方法。

private void getMoreData(Query query) {
    firestoreRecyclerOptions = new FirestoreRecyclerOptions.Builder<ModelClass>().setQuery(query, ModelClass.class).build();
    myFirestoreRecyclerAdapter = new MyFirestoreRecyclerAdapter(firestoreRecyclerOptions);
    recyclerView.setAdapter(myFirestoreRecyclerAdapter);
}

两个变量都声明为全局:

private FirestoreRecyclerOptions<ModelClass> firestoreRecyclerOptions;
private MyFirestoreRecyclerAdapter myFirestoreRecyclerAdapter;

当应用程序启动时,元素将使用第一种方法显示在RecyclerView中。我想要实现的是,在按钮单击时,当触发getMoreData()方法以在同一适配器中添加第二个查询的结果时,最终会有20个元素。现在,当我单击按钮时,第二个查询中的元素将覆盖第一个查询中的元素。

2 个答案:

答案 0 :(得分:1)

List中组合两个查询没有任何内置功能。

我能想到的最好的方法是在应用代码中创建合并结果的DocumentSnapshots /数组,然后使用数组适配器。它并不理想,因为您不会使用FirebaseUI。

或者,查看FirebaseUIs FirestorePagingAdapter,它在单个回收站视图中组合了(非实时).First()的多页(。

)。

答案 1 :(得分:0)

我最终使用了Friendly-eats code lab sample中适配器类的修改版本。

以下类允许您添加初始查询,然后使用changeOptions方法设置另一个查询。

FirestoreAdapter.setQuery(query)