MyLocationOverlay исчезнет проблема при следующей загрузке деятельности?
Друзья,
я заметил одну вещь, когда мое местоположение такое же, маркер 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 ответа
На самом деле причина была.
в первый раз, когда я загружаю запись, она получает местоположение 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();
}
}
};
Если вы вызываете метод finish() при вызове намерения (означает другую страницу), то вы уничтожаете все значения на своей странице и переходите к новой странице.
пример упражнение A занятие B
переход от занятия А к занятию Б
Намерение намерение = новое намерение ();
intent.setclass (...);
startActivity (намерение);
возвращаясь к занятию А
просто вызовите finish() в действии B