MyLocationOverlay исчезнет проблема при следующей загрузке деятельности? - PullRequest
0 голосов
/ 23 мая 2011

друзья

Я заметил одну вещь, когда мое местоположение такое же, маркер MyLocationOverlay не отображается на экране.

Я проверил это, когда я изменяю значения местоположения эмулятора, он появляется на экране, я перехожу на следующую страницу, затем снова захожу на ту же страницу, и он не отображается. Да, когда я меняю значения местоположения, он появляется снова. я хочу показать это всегда, если местоположение изменилось или нет кто-нибудь ведет меня, как?

вот мой код

onCreate()
{

 myLocOverlay = new MyLocationOverlay(this, mapView);
         myLocOverlay.enableMyLocation();
         mapView.getOverlays().add(myLocOverlay);
         mapView.postInvalidate();
zoomToMyLocation();
}


@Override
    protected void onPause() {
        super.onPause();
        if (myLocOverlay != null)
            myLocOverlay.disableMyLocation();
    }

    @Override
    public void onResume() {


        if (myLocOverlay != null)
            myLocOverlay.enableMyLocation();

        super.onResume();
    }

  private void zoomToMyLocation() {
                GeoPoint myLocationGeoPoint = myLocationOverlay.getMyLocation();
                if(myLocationGeoPoint != null) {
                        mapView.getController().animateTo(myLocationGeoPoint);
                        mapView.getController().setZoom(10);
                }
                else {
                        Toast.makeText(this, "Cannot determine location", Toast.LENGTH_SHORT).show();
                }
        }

Ответы [ 2 ]

0 голосов
/ 23 мая 2011

На самом деле причина была.

в первый раз, когда я загружаю запись, он получает местоположение GPS на месте. иногда, когда я прихожу к этому занятию, gps тратит время на определение местоположения, и мой код передается и ничего не появляется.

так что проблема в том, что если местоположение не получено вовремя, тогда я должен ждать его и отображать, как мы его получаем.

поэтому я реализовал RunOnFirstFix (), чтобы избавиться от этой проблемы. и еще одна самая важная вещь - использовать Mapview.postInvalidate (), чтобы отобразить ее в просмотре карты.

поэтому, если мы выполним этот шаг, у нас не возникнет проблема исчезновения MyLocationOverlay.

code sample onCreate()
{

// new line
myLocOverlay.runOnFirstFix(showCurrentLocationIfObtainedLate );

}


Runnable showCurrentLocationIfObtainedLate = new Runnable() {

            @Override
            public void run() {



                if(myLocOverlay.getMyLocation() != null)
                {
                mapView.getController().animateTo(myLocOverlay.getMyLocation());
                    mapView.postInvalidate();
                }



            }
        };
0 голосов
/ 23 мая 2011

Если вы вызываете метод finish () во время вызова намерения (означает другую страницу), то вы уничтожаете все значения на своей странице и переходите к новой странице.

пример Задание A Упражнение B

переход от занятия A к занятию B

намерение намерения = новое намерение ();

intent.setclass (...);

startActivity (намерение);

возвращаясь к Деятельности A

просто вызовите финиш () для Деятельности B

...