通过 Firebase 实时控制标记可见性

用户1877061

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

在此处输入图片说明

扎伊德·米尔扎 |

您必须在更新标记之前删除标记。创建一个ArrayList以保存Markers引用。

ArrayList<Marker> studentMarkersList=new ArrayList();

然后像这样使用列表:

@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();

       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))));
             studentMarkersList.add(studentMarker);
        }



      }

然后定义一个方法来删除标记:

private void removeStudentMarkers()
            {
                for(int i=0;i<studentMakersList.size();i++)
                {
                    studentMarkersList.get(i).remove();
                }
            }

最后这样做:

private void updateShowing(final boolean isShow) {

    removeStudentMarkers();

    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());
          }
        });
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何根据Firebase上的字段控制按钮的可见性

来自分类Dev

通过绑定设置可见性-dimens.xml

来自分类Dev

如何通过反射找出方法的可见性?

来自分类Dev

通过指令更新HTML元素的可见性

来自分类Dev

Android:如何通过DataBinding绑定ProgressBar可见性?

来自分类Dev

通过特定的程序集限制类的可见性

来自分类Dev

无法通过DataTemplates设置控件的可见性

来自分类Dev

TextBlock可见性通过按钮悬停更改WPF

来自分类Dev

无法通过界面了解方法的可见性

来自分类Dev

如何通过测试角度指令检查元素的可见性?

来自分类Dev

通过Java脚本的div可见性不起作用

来自分类Dev

如何通过单击按钮切换div的可见性

来自分类Dev

通过一种状态工作流程克隆图像可见性

来自分类Dev

通过g ++中不同名称空间的c ++方法可见性继承

来自分类Dev

通过Android数据绑定动态切换布局元素的可见性。

来自分类Dev

如何通过Intellij代码生成器更改设置方法的可见性?

来自分类Dev

JS-通过按钮将div的可见性设置为隐藏

来自分类Dev

如何通过setVisible()方法wicket ajax在方法中更改模型的可见性

来自分类Dev

无法通过OnClick事件在TextView上切换我的可见性

来自分类Dev

RESTful是否限制了每个通过身份验证的用户角色的资源字段可见性?

来自分类Dev

休息Api以获得产品如何通过过滤器的“状态”和“可见性”

来自分类Dev

通过javascript代码将可见性隐藏到jsp元素

来自分类Dev

无法通过Javascript查看DOM节点的样式可见性

来自分类Dev

如何通过数据绑定更新布局元素的可见性

来自分类Dev

如何通过单击按钮在 openlayers 3 中切换 geojson 层的可见性?

来自分类Dev

TFS-Git - 通过分支限制可见性

来自分类Dev

如何通过 webview 当前 url 设置按钮可见性

来自分类Dev

可见性设置为“消失”的视图是否是度量和布局通过的一部分?

来自分类Dev

Lilypond:控制谱号和键签名可见性,对齐标记

Related 相关文章

  1. 1

    如何根据Firebase上的字段控制按钮的可见性

  2. 2

    通过绑定设置可见性-dimens.xml

  3. 3

    如何通过反射找出方法的可见性?

  4. 4

    通过指令更新HTML元素的可见性

  5. 5

    Android:如何通过DataBinding绑定ProgressBar可见性?

  6. 6

    通过特定的程序集限制类的可见性

  7. 7

    无法通过DataTemplates设置控件的可见性

  8. 8

    TextBlock可见性通过按钮悬停更改WPF

  9. 9

    无法通过界面了解方法的可见性

  10. 10

    如何通过测试角度指令检查元素的可见性?

  11. 11

    通过Java脚本的div可见性不起作用

  12. 12

    如何通过单击按钮切换div的可见性

  13. 13

    通过一种状态工作流程克隆图像可见性

  14. 14

    通过g ++中不同名称空间的c ++方法可见性继承

  15. 15

    通过Android数据绑定动态切换布局元素的可见性。

  16. 16

    如何通过Intellij代码生成器更改设置方法的可见性?

  17. 17

    JS-通过按钮将div的可见性设置为隐藏

  18. 18

    如何通过setVisible()方法wicket ajax在方法中更改模型的可见性

  19. 19

    无法通过OnClick事件在TextView上切换我的可见性

  20. 20

    RESTful是否限制了每个通过身份验证的用户角色的资源字段可见性?

  21. 21

    休息Api以获得产品如何通过过滤器的“状态”和“可见性”

  22. 22

    通过javascript代码将可见性隐藏到jsp元素

  23. 23

    无法通过Javascript查看DOM节点的样式可见性

  24. 24

    如何通过数据绑定更新布局元素的可见性

  25. 25

    如何通过单击按钮在 openlayers 3 中切换 geojson 层的可见性?

  26. 26

    TFS-Git - 通过分支限制可见性

  27. 27

    如何通过 webview 当前 url 设置按钮可见性

  28. 28

    可见性设置为“消失”的视图是否是度量和布局通过的一部分?

  29. 29

    Lilypond:控制谱号和键签名可见性,对齐标记

热门标签

归档