0

リスト (firstVisibleItemからlastVisibleItemsPrevious.

これは、私のデータベースから一時的に割り当てるリストです

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

私の方法では、次の 3 つの問題があります。

  • 1つ目は、マップを完全に消去することです(点滅)。
  • 一部のマーカーは常に正しく割り当てられていません (理由がわかりません)。
  • したがって、animateCamera は、すべての位置が正しくないように見えます。builder

現在表示されているマップ (リスト) を確認し、新しいリストを確認してから、古いリストにないものを追加し、新しいリストにないものを削除する方法を試しました。しかし、それはまだ遅れていて、常にマーカーを追加することになり、「古い」マーカーを正しく削除しませんでした。私も試してみましたMarker.setVisibility()が成功しませんでした。

この種の高速操作を処理するには、どうすればよいでしょうか? 非表示/表示操作のソースとして、少なくとも or のリストが必要であることに注意してください (動的に割り当てられます) List<MarkerOptions>List<LatLng>List<Marker>

4

1 に答える 1

0

バグは

mMarkers.add(position, markerOptions);

それはリストを押していました。

于 2014-02-01T14:44:14.537 に答える