android - 标记消失

标签 android sqlite google-maps marker

我试图在范围内时将标记设置为在 map 上可见,而在不在范围内时设置为不可见。当我移动并进入区域时,标记会出现——但当我离开范围时,标记仍然可见。这是我的代码 onLocationUpdate。 我遍历我的数据库并添加标记。 getDeviceLocation 返回包含我当前位置的 Ltglng。我也为 GPS 提供商实现了这一点。任何想法都会有所帮助!

 locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 1, new LocationListener() {
            @Override
            public void onLocationChanged(Location location) {
                Cursor res = activityA.myDB.getAllData();
                while (res.moveToNext()) {

                    double ltd = Double.valueOf(res.getString(3));
                    double lng = Double.valueOf(res.getString(4));
                    LatLng hole = new LatLng(ltd, lng);
                    Marker marker = mMap.addMarker(new MarkerOptions().position(hole)
                            .title(res.getString(1)).visible(false));

                 if (SphericalUtil.computeDistanceBetween(getDeviceLocation(), marker.getPosition()) <3 ) {
                        marker.setVisible(true);
                    } 
                }
            }

最佳答案

根据您提供的内容,我可以收集到这些内容。

您正在添加标记(最初设置为不可见),然后如果它符合您的 if 语句,则将其设置为不可见。问题是,我看不到任何地方可以让它们再次不可见或删除它们。

您是否将这些标记保存在您的 Activity 中?例如在 ArrayList 中?

我有两个建议:

1) 在 while 语句之前调用 mMap.clear() 。这将清除所有标记的 map ,然后在创建新标记时添加它们。

2) 将所有标记保存在 ArrayList 中,然后在 onLocationChanged 中,使用 for 循环遍历所有标记并使超出范围的标记不可见。这是一个例子:

for (Marker marker: mMarkerArrayList) {
    if (outOfRange()) {
        marker.visible(false);
    }
}

这里的 mMarkerArrayList 是包含所有标记的 ArrayList。 outOfRange() 是一个辅助函数,如果标记超出范围,它会返回一个 bool 值。

关于android - 标记消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49861568/

相关文章:

android - 在同一 fragment 中合并 Map 和 ListView

javascript - 是否可以在没有 internet api v3 javascript 的情况下显示谷歌地图?

java - 使 LinearLayout 与 ListView 可滚动

SQLite,按时间戳对数据库进行排序

android - 在显示 DialogFragment 时禁用基础 View 上的触摸事件

php - 拉拉维尔 : Integrity constraint violation

sqlite - 如何在一个查询中执行多个查询?

php - 验证包含 Google map 字段的表单

android - 获得布局高度的最佳位置是什么?

android-listview 透明单元格问题