0

朋友们,

当我的位置相同时,我注意到一件事 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();
                }
        }
4

2 回答 2

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



            }
        };
于 2011-05-23T10:25:15.087 回答
0

如果您在调用意图(意味着您的其他页面)时调用 finish() 方法,那么您正在破坏页面中的所有值并移至新页面。

示例 活动 A 活动 B

从活动 A 转移到活动 B

意图意图 = new Intent();

意图.setclass(...);

开始活动(意图);

回到活动 A

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

于 2011-05-23T09:41:45.690 回答