【发布时间】:2018-03-04 09:26:07
【问题描述】:
所以我有学生显示在地图上,每个学生都有show 布尔值。我正在使用此值来确定标记是否应使用setVisible() 方法显示在地图上。!
我有一个切换按钮,通过更新实时数据库中的show 值来显示和隐藏标记,但它并不总是有效。
问题是,当值设置为false => 标记不会隐藏!!,但是当它变为true 时,它们会出现!?标记隐藏的唯一方法是如果我关闭地图然后再次打开它,这当然不是任何人想要的。!
有什么建议。!?
我如何显示标记
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference refStudents = database.getReference("Students");
refStudents.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot snapshot, String s) {
}
@Override
public void onChildChanged(DataSnapshot snapshot, String s) {
LatLng latLng = new LatLng(snapshot.getValue(TestUserStudent.class).getLat(),
snapshot.getValue(TestUserStudent.class).getLang());
boolean show = snapshot.getValue(TestUserStudent.class).isShow();
studentMarker = googleMap.addMarker(new MarkerOptions()
.position(latLng)
.title(item.getValue(TestUserStudent.class).getName() + "")
.snippet(item.getValue(TestUserStudent.class).getSection() + "")
.icon(BitmapDescriptorFactory.fromBitmap(
getMarkerBitmapFromView(item.getValue(TestUserStudent.class)
.getImg(), R.drawable.redMarker))));
if (show) {
studentMarker.setVisible(true);
}else {
studentMarker.setVisible(false);
}
}
@Override
public void onChildRemoved(DataSnapshot snapshot) {
}
@Override
public void onChildMoved(DataSnapshot snapshot, String s) {
}
@Override
public void onCancelled(DatabaseError error) {
}
});
我如何更新标记
private void updateShowing(final boolean isShow) {
FirebaseDatabase.getInstance().getReference().child("Students")
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot ds : snapshot.getChildren()) {
ds.child("show").getRef().setValue(isShow);
}
}
@Override
public void onCancelled(DatabaseError error) {
Log.i( "onCancelled: ", error.getDetails() +"\n "+ error.getMessage());
}
});
}
TestUserStudent.class
public class TestUserStudent {
boolean show;
//other attributes
public boolean isShow() { return show; }
public void setShow(boolean show) { this.show = show; }
//other setters & getters
}
Firebase rtd
【问题讨论】:
-
更新时,您如何检查要更新的学生标记?
-
我不是,我希望他们都更新..!当我单击切换按钮时,数据库中所有子项中的值都会正确更新..!
-
如果它已经这样做了,有什么问题?
-
UI 上的问题或读取值.. 假设所有学生在打开地图时都有 isShow
false。当我将其更改为 true 时,所有学生标记都正常显示,但如果我将其更改回false,即使值更改为 false,它们也不会隐藏。如果我关闭地图并再次打开它,它们将不会显示,因为它是错误的,但我希望这实时发生
标签: java android google-maps firebase firebase-realtime-database