MyLocationOverlay下次加载活动时会消失问题?

时间:2011-05-23 09:33:44

标签: android 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 个答案:

答案 0 :(得分:0)

如果您在调用intent时调用finish()方法(表示您的其他页面),那么您正在销毁页面中的所有值并转向新页面。

示例活动A活动B

从活动A转移到活动B

Intent intent = new Intent();

intent.setclass(...);

startActivity(意向);

回到活动A

只需在活动B上调用finish()

答案 1 :(得分: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();
                }



            }
        };