0

我用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();
    }
4

1 回答 1

2

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

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

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

于 2019-05-30T10:00:20.807 回答