重新加载地图活动不会再次显示标记

时间:2013-10-08 13:23:00

标签: android google-maps google-maps-api-2

我正在创建非常简单的应用程序并尝试学习android。

在这个应用程序中,我创建了一个包含Map的活动,它在选项菜单项的点击上也有选项菜单,打开另一个活动,关闭当前地图,这里是代码。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    Intent intent = new Intent();

    if (item.getItemId() == R.id.LegalNotice) {
        intent.setClass(Map.this, LegalNotices.class);
    } else if (item.getItemId() == R.id.ChangeDistance) {
        intent.setClass(Map.this, ChangeDefaultDistance.class);
    }

    startActivity(intent);
    this.finish();

    return true;
}

现在,ChangeDefaultDistance是仅包含列表视图的活动。现在,当从列表视图中选择特定项目时,我将再次启动Map活动。这是代码。

@Override
        public void onItemClick(AdapterView<?> arg0, View view,
                int position, long id) {

            TextView tv;

            tv = (TextView) view;

            Map.distance = tv.getText().toString();

            startActivity(new Intent(ChangeDefaultDistance.this, Map.class));

        }

现在,当map再次启动时,它执行onCreate()方法,但之前在onCreate方法中我将地图缩放到特定位置并绘制标记现在它没有缩放而且也没有绘制标记。当我调试代码时我发现它正在执行代码但没有任何事情发生。

有人能告诉我为什么会这样吗?

这也是onCreate方法的代码。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (isGooglePlayAvailable()) {

        criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);

        // Getting the service from context and giving to location_manager
        location_manager = (LocationManager) getSystemService(LOCATION_SERVICE);

        setContentView(R.layout.mapdemo);

        placesTask = new PlacesTask();

        getGoogleMap();

        getUserLocation();

        google_map.clear();

        Toast.makeText(Map.this, "Hello Sexy!!!", Toast.LENGTH_LONG).show();

        Toast.makeText(this, "Latitude:" + lat + " Longitude:" + lang,
                Toast.LENGTH_LONG).show();

        drawMarker();

        // If Distance is not choosed default distance is given
        if (distance.equals("")) {
            distance = "1000";
        }

        sb = createUrl();

        placesTask.execute(sb);

    }

}

所有功能都正常运作。

但它不会再次缩放并绘制标记可能是什么问题?

1 个答案:

答案 0 :(得分:1)

您在打开ListView Activity之前没有看到所应用的更改的原因是您从scrach开始映射Activity并且它将再次抛出onCreate方法并且基本上再次创建此Activity中的所有观看次数。

用简单的话来看待这就好像你正在创建同一个Acitivty的另一个实例,现在你将在活动堆栈中有两个相同类型的活动。

您应该做的不是使用startActivity方法启动列表活动,而是应该使用startActivityForResult启动它,并将列表Acitivty中的结果返回到您已创建的地图Activity而不是重新开始新的Activity

看看这个问题,了解如何使用startActivityForResult方法:

How to manage `startActivityForResult` on Android?

并在文档中:

http://developer.android.com/training/basics/intents/result.html