【问题标题】:Using more than one mapview in single application在单个应用程序中使用多个地图视图
【发布时间】:2012-06-11 09:18:20
【问题描述】:

我的应用程序包含选项卡布局(TabHost、TabSpec)。
我在我的应用程序中使用了两个地图视图。因此,如果我在一个 map_activity 中启用卫星视图,然后转到另一个 map_activity,则其他地图也会显示在卫星视图中,如果我将一个 map_activity 拖向美国,则其他地图视图也会自动拖向美国,无论它之前指向哪里。

我一般来说,如果我们使用 android:process=":map1" 和 android:process=":map2" 在不同的进程中运行两个活动,那么我们可以解决上述问题。我提到了here...

但是我们如何在标签栏(TabHost,TabSpec)应用程序中解决这个问题?

【问题讨论】:

  • 您在回答自己的问题。看看你所指的答案,两个活动,每个活动都有他们的地图实例。这些活动存储在您的选项卡中。
  • 我知道当您使用 startActivity(intent) 开始活动时,该链接是一种解决方案。但是当您在 tab(TabHost, TabSpec) 中显示活动时,此解决方案不起作用。

标签: android google-maps android-mapview android-tabhost


【解决方案1】:

这不是一个完美的解决方案,但它会完成工作,整理一下。

在您需要在代码中创建地图视图的那些选项卡中:

    mMapView = new MapView(this, MAPS_KEY);
    mMapView.setClickable(true);
    LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
    mMapView.setLayoutParams(params);
    FrameLayout mapFrame = (FrameLayout) findViewById(R.id.map_container);
    mapFrame.addView(mMapView);

xml 是不言自明的(如果不只是请求)。

这种方法的问题是,当 mapview 被实例化时,它会记住旧的位置,所以你需要将地图移动到你想要的新位置。可以这样做:

mMapView.getController().animateTo(location);
                        mMapView.getController().setZoom(GlobalValues.EMERGENCY_MAP_ZOOM_LVL);

【讨论】:

  • 地图不仅会记住最后的位置,还会记住最后的地图模式,即地图、卫星。我们可以直接使用 animateTo 方法在不是不同地图的新活动中更改地图的位置。
  • 不,它不是一张不同的地图,但您可以在多个活动中使用它。如果你想要一张完全不同的地图,我知道的唯一解决方案就是你说的那个不起作用......
  • 该解决方案有效。我认为 startActivity(intent) 方法具有所有的魔力。但不在标签栏应用程序中。当您选择特定选项卡(在清单中具有活动,如 android:process=":remote")时,您将能够在 ddms 中看到没有为此创建单独的进程。
猜你喜欢
  • 2012-11-25
  • 2019-12-21
  • 1970-01-01
  • 2011-12-10
  • 1970-01-01
  • 1970-01-01
  • 2010-12-22
  • 1970-01-01
  • 2013-05-08
相关资源
最近更新 更多