2011-05-23 53 views
0

朋友,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(); 
       } 
     } 

回答

0

實際上的原因是。

第一次當我加載記錄當場獲得gps位置。有時當我來到這個活動gps需要時間來獲取位置,我的代碼被傳遞,沒有出現。

所以問題是如果沒有及時獲得位置,那麼我應該等待它,並顯示,因爲我們得到它。

所以我實現了RunOnFirstFix()來擺脫這個問題。另一個最重要的事情是使用Mapview.postInvalidate()在mapview上顯示它。

所以如果我們按照這一步我們不會讓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(); 
       } 



      } 
     }; 
2

如果要調用完成()方法,同時呼籲意圖(指其他網頁),那麼你正在摧毀你的頁面中的所有值,並邁向新的頁面移動。

例如活動A活動B

從活動A移動到活動乙

意圖意圖=新意圖();

intent.setclass(...);

startActivity(intent);

回來到活動一個

只是調用finish()在活動B