首页 > 解决方案 > 隐藏标记中的片段,以便用户看不到 postId

问题描述

问题是,对于我在地图上的标记,我的标题很好,然后snippet()我插入了,postId以便以后我可以使用它postIdOnInfoWindowClickListener数据库中搜索它,如果它匹配它需要用户其中PostDetailFragment包含所有帖子的数据...

显然,我不希望用户postId在单击标记时看到信息窗口出现,但此时片段应该隐藏,所以我需要替换它,或者让它不可见,或者 GONE ...

另外,为了识别我尝试使用的标记,setTag()and getTag(),但它没有用。

建议?我需要隐藏或使每个标签中的片段不可见,以便用户看不到postid,但我需要postId在数据库中运行查询。

也许有更好的方法来做到这一点?

地图片段

                                LatLng latLng = new LatLng(latitude, longitude);
                                // MarkerOptions markerOptions = new MarkerOptions().position(latLng).title(post.getText_event()).snippet(post.getText_location() + " \u25CF " + post.getTime());
                                MarkerOptions markerOptions = new MarkerOptions().position(latLng).title(post.getText_event()).snippet(post.getPostid());
                                markerOptions.icon(BitmapDescriptorFactory.defaultMarker());
                                mGoogleMap.addMarker(markerOptions);

                                // Info Window

                                mGoogleMap.setOnInfoWindowClickListener(marker -> {
                                    DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Posts");
                                    databaseReference.addValueEventListener(new ValueEventListener() {
                                        @Override
                                        public void onDataChange(@NonNull DataSnapshot snapshot1) {
                                            for (DataSnapshot snap : snapshot1.getChildren()) {
                                                Post pos = snap.getValue(Post.class);
                                                if (pos != null) {
                                                    if (marker.getSnippet().equals(pos.getPostid())) {
                                                        SharedPreferences.Editor editor = getActivity().getSharedPreferences("PREFS", Context.MODE_PRIVATE).edit();
                                                        editor.putString("postid", marker.getSnippet());
                                                        editor.apply();
                                                        getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new PostDetailFragment(), null).addToBackStack(null).commit();
                                                    }
                                                }
                                            }
                                        }

                                        @Override
                                        public void onCancelled(@NonNull DatabaseError error) {

                                        }
                                    });
                                });
                            }

标签: javaandroid

解决方案


使用默认标记有一些限制。

您应该做的是创建一个名为 CustomMarker 的类来实现 ClusterItem,然后您可以将其用作标记。

ClusterItem 只是一个标记。

public class Marker implements ClusterItem {

    private final LatLng positiond;
    private final String markerId;
    private final String title;
    private final String tag;



    private final Post post;


    private final String snippet;

    public Marker(LatLng positiond, String markerId, String title, String snippet, Post post,String tag) {
        this.positiond = positiond;
        this.markerId = markerId;
        this.title = title;
        this.snippet = snippet;
        this.post=post;
        this.tag=tag;
    }

    @Override
    public LatLng getPosition() {
        return positiond;
    }

    @Override
    public String getTitle() {
        return title;
    }

    @Override
    public String getSnippet() {
        return snippet;
    }

    public String getMarkerId() {
        return markerId;
    }
    public Post getPost() {
        return post;
    }
    public String getTag() {
        return tag;
    }
    
}

上面是一个标记。然后你可以像上面那样将帖子传递到标记中。

创建标记/群集项时,您可以将 MarkerID 作为 PostId 传递,然后单击它。您可以获得markerID,然后执行您想要的任何逻辑。


推荐阅读