Проблема обновления карты. Метод mapview.invalidate () не работает. - PullRequest
1 голос
/ 01 июня 2010

В моем приложении я пытался найти местоположение на карте различий, используя diff lat и long. В первый раз, когда приложение показывает карту, но когда я изменяю lat long и пытаюсь сделать недействительным представление карты, используя diff lat long, карта не обновляется.

Ниже мой код, пожалуйста, посмотрите и предложите соответственно:

// Исходный код

protected void onCreate(Bundle icicle) {
        // TODO Auto-generated method stub
        super.onCreate(icicle);
        setContentView(R.layout.main);
        infoTextView = (TextView) findViewById(R.id.infoTextView);

        // Finding Current Location
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                1l, 1l, this);
    Location location = locationManager.getLastKnownLocation("gps");


    // mock location by hard-code if DDMS has not sent a fake loc to the emulator.
        if (location == null) {
            lat = 13.6972 * 1E6;
            lng = 100.5150 * 1E6;
    } else { // get real location if can retrieve the location sent by DDMS or GPS
            lat = location.getLatitude() * 1E6;
            lng = location.getLongitude() * 1E6;
        }
        setGPSLocation(lat, lng);
    }

// Это функция, которую я вызываю с разными значениями lat и long

public void setGPSLocation(Double lati, Double longi)
    {
        lat = lati;
        lng = longi;
        System.out.println("Latitude :"+ lat +" Longitude :"+lng);

        // Prepare text being shown
        String tmpLoc = LOC_INFO_TEMPLATE;
        tmpLoc = tmpLoc.replace("lg", String.valueOf(lng));
        tmpLoc = tmpLoc.replace("lt", String.valueOf(lat));
        infoTextView.setText(tmpLoc);

        // Setup Zoom/Hide Buttons
        linearLayout = (LinearLayout) findViewById(R.id.zoomview);
        mapView = (MapView) findViewById(R.id.mapview);  
        mapView.invalidate();

        mapView.setBuiltInZoomControls(true);                           //new by me
        mapView.setSatellite(true); // Set satellite view
        mZoom = (ZoomControls) mapView.getZoomControls();
        linearLayout.addView(mZoom);

        // Setup Marker

        mapOverlays = mapView.getOverlays();
        drawable = this.getResources().getDrawable(R.drawable.marker);
        itemizedOverlay = new MyItemizedOverlay(drawable);
        GeoPoint point = new GeoPoint(lat.intValue(), lng.intValue());
        OverlayItem overlayitem = new OverlayItem(point, "", "");
        itemizedOverlay.addOverlay(overlayitem);
        mapOverlays.add(itemizedOverlay);

        // Centralize Current Location
        myMapController = mapView.getController();
        myMapController.setZoom(DEFAULT_ZOOM_NUM);
        myMapController.animateTo(point);   



    }

Любое предложение действительно заметно.

1 Ответ

1 голос
/ 22 июля 2010

Вы вызываете setGPSLocation (Double lati, Double longi) метод только один раз в onCreate (Bundle icicle) {...} Вот почему вы не можете обновить свою карту. Вы можете использовать CountDownTimer для вызова вашей карты каждые XXXX мсек. Или создайте новую кнопку и вызовите setGPSLocation (Double lati, Double longi) из его onClick метода.

использование CountDownTimer:

public class RefreshLocationCount extends CountDownTimer{
public RefreshLocationCount(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}

@Override
public void onFinish() {
    Toast.makeText(getApplicationContext(), "Counter::onFinish()!!",
              Toast.LENGTH_SHORT).show();
}

@Override
public void onTick(long millisUntilFinished) {
    setGPSLocation(Double lati, Double longi);
}

}


In onCreate():
{.....

RefreshLocationCount refreshLocationCounter = new RefreshLocationCount(10000,1000);
....
...
refreshLocationCounter.start();

}

Создайте Location location - глобальную переменную и используйте ее в setGPSLocation ()
lat = location.getLatitude () * 1E6; lng = location.getLongitude () * 1E6;

(не передавать параметры в setGPSLocation () , просто использовать там данные о местоположении)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...