java - 隐藏标记中的片段,以便用户看不到 postId
问题描述
问题是,对于我在地图上的标记,我的标题很好,然后snippet()
我插入了,postId
以便以后我可以使用它postId
在OnInfoWindowClickListener
数据库中搜索它,如果它匹配它需要用户其中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) {
}
});
});
}
解决方案
使用默认标记有一些限制。
您应该做的是创建一个名为 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,然后执行您想要的任何逻辑。