将 Geofirestore 文档结果加载到 RecyclerView

Load Geofirestore documents results into RecyclerView

我使用 GeoFirestore 找到最近的位置,它有效但我需要加载我进入 RecyclerView 的文档,如何实现?

GeoFirestore 方法

   private void getNearestEstate(){

    GeoQuery geoQuery = geoFirestore.queryAtLocation(new GeoPoint(latitude, longitude), 2);
    geoQuery.addGeoQueryDataEventListener(new GeoQueryDataEventListener() {
        @Override
        public void onDocumentEntered(DocumentSnapshot documentSnapshot, GeoPoint geoPoint) {

        }
}

加载到 Rv

   private void dataFetch(Query query,int rvView){


          FirestoreRecyclerOptions<Property> options = new FirestoreRecyclerOptions.Builder<Property>()
            .setQuery(query, Property.class)
            .build();

        Toast.makeText(getContext(),options.toString(),Toast.LENGTH_LONG).show();
    mAdapter = new DiscoverAdapter(options);
    RecyclerView recyclerView = root.findViewById(rvView);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(getContext(),LinearLayoutManager.HORIZONTAL,false));
    recyclerView.setAdapter(mAdapter);
    mAdapter.startListening();
    }

当您对 Cloud Firestore 数据库执行 GeoQuery 并使用 addGeoQueryDataEventListener() 时,必须实施一些方法。在您的示例中,其中一种方法称为 onDocumentEntered()。如您所见,它有两个参数,第一个是 DocumentSnapshot 类型。该对象包含您范围内的所有位置对象。为了能够显示这些位置,您需要遍历 DocumentSnapshot 对象并获取所有位置。

要显示 RecyclerView 中的所有位置,您首先需要创建一个位置列表。因此,当您迭代时,将所有位置对象添加到列表中。然后简单地创建一个适配器并将该列表传递给它的构造函数。将适配器设置为 RecyclerView 即可完成。

如果您认为可以将 GeoQuery 传递给 FirestoreRecyclerOptions 对象,就像您通常在查询 Cloud Firestore 数据库时所做的那样,请注意这是不可能的,因为 GeoQuery class 扩展 com.google.firebase.firestore.Query.