当前位置: 首页 > 知识库问答 >
问题:

利用Firebase实时控制标记可视性

太叔高义
2023-03-14

所以我让学生在地图中显示,每个学生都有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
 }

火药rtd

共有1个答案

刘英彦
2023-03-14

只要在onchildChanged方法上show==false时不创建标记:

if (show) {
    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))));
}
 类似资料:
  • 目前,我用flutter构建了一个板球拍卖类应用程序,在每个出价中,它都将在聊天屏幕上显示为聊天,我用Cloud Firestore用streams做了这件事,事情是在一个点之后,云Firestore的阅读量飙升。然后我意识到我只是更新了当前球员的金额(他的出价)。他的出价和出价的球队是唯一不断变化的东西。有了firestore,我可以用流获取所有这些数据,并轻松地将其显示在聊天屏幕上。现在我想改

  • 我正在尝试为一个由横向动力学模型定义的自动车辆实施横向控制器。我的问题是CVs没有达到SP设定的理想参考点或目标点。我使用以下运动方程和目标函数。我使用半经验公式(pacejka)计算Fyf Fyr提供的轮胎力。这是运动方程和目标函数。提前谢谢。

  • 我已经在Chrome(65.0.3325.162)、Firefox(59.0.1)和Android(在三星平板上)上进行了测试。我的系统的音量对其他应用程序和YouTube视频都很好。 下面是(最小的)代码(添加其他属性,如高度和海报等,对问题没有影响): 我是不是漏掉了什么明显的东西? 编辑: 当我在上使用示例视频进行测试时,出现了控件。似乎和编码的mp4视频本身有关系。 我现在已经删除了视频U

  • 本文向大家介绍利用pyecharts实现地图可视化的例子,包括了利用pyecharts实现地图可视化的例子的使用技巧和注意事项,需要的朋友参考一下 pyecharts 是一个用于生成 Echarts 图表的类库。Echarts 是百度开源的一个数据可视化 JS 库。用 Echarts 生成的图可视化效果非常棒,pyecharts 是为了与 Python 进行对接,方便在 Python 中直接使用数

  • 当我试图删除或编辑实时数据库中的节点时,我总是得到这样的信息:我必须选择一个元素较少的键来更改某些内容,否则它是只读的。 但是当我单击低级节点时,没有任何反应。因此,我实际上可以从控制台:( 一周前,我没有看到这个警告,一切都很好!知道如何回到工作版本吗? 我也觉得德语翻译的不太好,因为它告诉我应该激活另一种模式。用英语说,模式被激活。

  • 问题内容: 在Windows下如何控制Python中的鼠标光标,即将其移动到特定位置并单击? 问题答案: 在安装pywin32(在我的情况下为 )后,在WinXP上进行了Python 2.6(也已测试3.x)测试: