【问题标题】:Erase an Specific Marker擦除特定标记
【发布时间】:2017-08-30 02:26:00
【问题描述】:

我正在开发一个应用程序,其中我有一个带有出租车标记的地图(如 UBER 出租车),我正在使用 firebase,问题是我只需要删除标记(firebase 上的孩子)它已经改变了它的位置,如果其他人还没有改变,我需要将它们保留在地图中......我已经研究过一个功能,但它会擦除地图上的每一个标记,而不仅仅是一个(出租车)已经“感动”了……

 private void loadLocationsFromCloud() {

    Bundle extras = getIntent().getExtras();
    String company= extras.getString("cabs-company").toString();
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference myRef = database.getReference("company");
    Query groupQuery = myRef.child(company);

    groupQuery.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
          //nothing to do here.
        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {
            Log.d(TAG, "onDataChange");
            eraseMarkers();
            LastLocation item = dataSnapshot.getValue(LastLocation.class);
            LatLng newLatLng = new LatLng(item.getmLatitud(), 
            item.getmLongitud());
            Integer cabId = new Integer(item.getcabId());
            drawMarker(newLatLng, cabId);


        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {
            Log.d(TAG, "onDataChange");


        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

//绘制标记的方法

  private void drawMarker(LatLng pos, final Integer cabId) {
    final String id = cabId.toString();
    final String cabId = "u" + id;
    Bundle bundle = getIntent().getExtras();
    final String company = bundle.getString("company");
    final MarkerOptions markerOptions = new MarkerOptions().position(pos);
    markerOptions.position(pos);

 markerOptions.icon(BitmapDescriptorFactory.fromResource(R.mipmap.rutixxx));
    markerOptions.snippet("Cab #: " + num);
    markerOptions.title(company);


    if (mMap != null) {
        marker = mMap.addMarker(markerOptions);
        markersToClear.add(marker);
    }

}

//清除标记的方法。

 private void eraseMarkers() {

    for (Marker marker : markersToClear) {
        marker.remove();
    }
    markersToClear.clear();
}

感谢任何帮助

【问题讨论】:

    标签: java android google-maps google-maps-markers


    【解决方案1】:

    drawMarker方法中,你添加所有标记markersToClear,当然当你调用函数eraseMarkers时所有标记都会被擦除。

    我认为您应该只在标记更改时将标记添加到markersToClear 。可能android里面有个change event listener,试试用吧。

    【讨论】:

    • 您好,感谢您的回答,我一直在寻找更改事件侦听器,但无法解决问题...问题是这些“变量”(驾驶室的纬度、经度)改变它的位置)来自一个firebase数据库,这就是为什么我不知道如何用它们创造条件......
    • 我一直在考虑一个 hashmap,但不太清楚如何在上面引入标记。}
    猜你喜欢
    • 1970-01-01
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 2019-01-14
    • 1970-01-01
    相关资源
    最近更新 更多