我想使用 GeoFire 在 android 中填充 Firebase Recycler View

Posted

技术标签:

【中文标题】我想使用 GeoFire 在 android 中填充 Firebase Recycler View【英文标题】:i want to use GeoFire to Populate Firebase Recycler View in android 【发布时间】:2020-09-03 10:17:39 【问题描述】:

我正在构建一个约会应用程序,我想在用户位置附近找到人,所以我使用 geofire,但我不知道如何将它与回收器适配器一起使用 这是我的代码

    FirebaseRecyclerOptions<Users> options =
                new FirebaseRecyclerOptions.Builder<Users>()
                        .setQuery(mUsersDatabaseReference, Users.class)
                        .build();
            FirebaseRecyclerAdapter<Users, UserViewHolder> firebaseRecyclerAdapter=new FirebaseRecyclerAdapter<Users,UserViewHolder>(options
            ) 
                @NonNull
                @Override
                public UserViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) 
                    View view = LayoutInflater.from(parent.getContext())
                            .inflate(R.layout.recycle_list_single_user, parent, false);
                    return new UserViewHolder(view);
                

                @Override
                protected void onBindViewHolder(@NonNull UserViewHolder userViewHolder, int i, @NonNull Users users) 
                    LinearLayout layout=userViewHolder.mView.findViewById(R.id.all);
                    if (users.getName()==null)layout.setVisibility(View.GONE);
                    else
                        userViewHolder.setName(users.getName());
                        if(users.getOnline()!=null)userViewHolder.setUserOnline(users.getOnline());
                        userViewHolder.setStatus(users.getStatus());
                        userViewHolder.setImage(users.getImage(),getActivity().getApplicationContext(),users.getSex());
                        final String user_id=getRef(i).getKey();
                        final String userName=users.getName();
                        userViewHolder.mView.setOnClickListener(new View.OnClickListener() 
                            @Override
                            public void onClick(View v) 
                                Intent profileIntent=new Intent(getContext(), ProfileActivity.class);
                                profileIntent.putExtra("user_id",user_id);
                                startActivity(profileIntent);
                            
                        );

                        ViewGroup.MarginLayoutParams marginParams = new ViewGroup.MarginLayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
                        if(i%3==1)
                            marginParams.setMargins(0, 150, 0, 0);
                        else if(i>5)
                            marginParams.setMargins(0, -150, 0, 0);
                        else if(i>2)
                            marginParams.setMargins(0, -100, 0, 0);
                        layout.setLayoutParams(marginParams);

                    
                
            ;
            mUsersList.setAdapter(firebaseRecyclerAdapter);
                firebaseRecyclerAdapter.startListening();
            
        

我在这里搜索了很多,我没有找到任何解决方案

【问题讨论】:

【参考方案1】:

FirebaseUI 中的适配器旨在直接从 Firebase 实时数据库或 Cloud Firestore 加载数据。它们没有与 GeoFire/GeoFirestore 集成。

如果您想根据地理查询显示数据,则必须构建自己的适配器。当onKeyEntered 触发时,您会将密钥(或其关联数据)添加到List,然后在使用该列表初始化的适配器上调用notifyDataSetChanged

如果您以前曾构建过自定义适配器,那几乎都是一样的。如果您之前没有构建过,我建议您关注tutorial 以熟悉它。之后,您可以使用 FirebaseUI 适配器的代码来获得(复制/粘贴)灵感。

【讨论】:

以上是关于我想使用 GeoFire 在 android 中填充 Firebase Recycler View的主要内容,如果未能解决你的问题,请参考以下文章

geofire android 存储和检索位置并将其显示在地图上

使用 android Geofire 获取经度和纬度

Android geofire获取一定半径内的用户列表

使用类似地理围栏的 geofire

GeoFire Android:GeoQuery 只显示最近的用户,而不是所有附近的用户

使用 GeoFire 获取到多个点的最近点