0

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

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

@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));

        }

现在,当地图再次启动时,它执行 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);

    }

}

所有功能都正常工作。

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

4

1 回答 1

1

您在打开 ListView 之前没有看到您应用的更改的原因Activity是您正在从头开始 MapActivity并且它会再次抛出onCreate方法并且基本上再次在其中创建所有视图Activity

简而言之,就好像您正在创建另一个相同的实例,Acitivty现在您的活动堆栈中将有两个相同类型的活动。

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

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

如何在 Android 上管理“startActivityForResult”?

在文档中:

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

于 2013-10-08T13:29:32.277 回答