处理快速添加 /删除标记命令 / Google Maps V2 scrolllistener



我想根据列表执行快速添加/删除或隐藏/显示标记(firstVisibleItemlastVisibleItemsPrevious之间的范围。

这是从我的数据库暂时从

上分配的列表
private List<MarkerOptions> mMarkers = new ArrayList<MarkerOptions>();
private int firstVisibleItemPrevious = 0;
private int lastVisibleItemsPrevious = 0;
//Loops, network commands, etc
// assign a marker per item
    MarkerOptions markerOptions = new MarkerOptions()
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.marker))
                .anchor(0.5f, 0.5f)
                .visible(false)
                .position(new LatLng( (Double) coords.get(1) , (Double) coords.get(0)));            
    mMarkers.add(position, markerOptions);

这就是标记的I/O的方式:

aListView.setOnScrollListener(new OnScrollListener() {
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        int lastVisibleItem = firstVisibleItem+visibleItemCount;
        //if we have the markers from the DB and we notice a move do:
        if( mMarkers.size() > 0 && 
                (firstVisibleItemPrevious != firstVisibleItem ||
                lastVisibleItemsPrevious != lastVisibleItem)
                ){
            LatLngBounds.Builder builder = new LatLngBounds.Builder();
            mMap.clear(); // clear the map to add new markers
            for(int x = firstVisibleItem; x < lastVisibleItem; x++){                    
                Marker mMarker = mMap.addMarker(mMarkers.get(x));
                builder.include(mMarker.getPosition());
            }
            //animate
            CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(builder.build(), 60);
            mMap.animateCamera(cu);
            firstVisibleItemPrevious = firstVisibleItem;
            lastVisibleItemsPrevious = lastVisibleItem;
        }
    }
}

使用我的方法,我有三个问题:

  • 首先是我完全擦除地图(眨眼)。
  • 某些标记并不总是正确分配的(我不明白为什么)。
  • 因此,AnimateCamera看起来似乎还没有正确正确的builder
  • 的所有位置

我尝试了一种检查当前可见地图(列表)的方法,然后检查新列表,然后添加不在旧列表中的列表,然后删除不在新列表中的列表。但是它仍然很懒惰,我最终添加了始终的标记,并且无法正确删除"旧"。我也尝试使用Marker.setVisibility()而没有成功。

什么可以是处理这类快速操作的好方法?请记住,我至少应该有List<MarkerOptions>List<LatLng>List<Marker>的列表作为我的hide/show操作的来源(动态分配)。

错误在

mMarkers.add(position, markerOptions);

它正在推动列表。

最新更新