如何在已经有“扩展”的活动中添加MapView?

时间:2014-02-16 14:22:03

标签: android api maps android-mapview

我正在开发一个Android应用程序,包括使用选项卡的滑动视图。 所有页面都有自己的布局,所有这些都很有效:D。

但是我想在这个视图中添加一个MapView(来自Google API),所以我需要将我的MainActivity(我唯一拥有的)扩展到MapActivity,但我不能(这里没有错):

 public class MainActivity extends ActionBarActivity implements ActionBar.TabListener{

那么有没有办法从MainActivity管理我的MapView?

非常感谢:)。

(抱歉我的英语语法不好)

2 个答案:

答案 0 :(得分:3)

通常当您偶然发现这样的问题时,您需要查看封装而不是扩展。你不能将MapView用作成员变量吗?

如果您查看MapView API,它会说明我们必须为MapView实施Android生命周期才能使其正常运行。因此,如果您使用MapView作为成员变量,则需要在主活动中覆盖以下方法以调用MapView中的匹配方法:

onCreate(Bundle)
onResume()
onPause()
onDestroy()
onSaveInstanceState(Bundle)
onLowMemory()

例如,您的活动将如下所示:

public final class MainActivity extends Activity {

    private MapView mMapView;

    @Override
    public final void onCreate(final Bundle pSavedInstanceState) {
            super(pSavedInstanceState);
            this.mMapView = new MapView(this);
            /* Now delegate the event to the MapView. */
            this.mMapView.onCreate(pSavedInstanceState);
    }

    @Override
    public final void onResume() {
            super.onResume();
            this.getMapView().onResume();
    }

    @Override
    public final void onPause() {
            super.onPause();
            this.getMapView().onPause();
    }

    @Override
    public final void onDestroy() {
            super.onDestroy();
            this.getMapView().onDestroy();
    }

    @Override
    public final void onSaveInstanceState(final Bundle pSavedInstanceState) {
            super.onSaveInstanceState(pSavedInstanceState);
            this.getMapView().onSaveInstanceState(pSavedInstanceState);
    }

    @Override
    public final void onLowMemory() {
            super.onLowMemory();
            this.getMapView().onLowMemory();
    }

    private final MapView getMapView() {
            return this.mMapView;
    }

}

答案 1 :(得分:0)

答案是否定的。如果不扩展MapActivity,就无法使用MapView。正如gulbrandr指出的那样有一个类似的问题here,这可能对任何尝试同样事情的人都有用。