在一个Fragment中使用MapView(蜂巢版)

81

现在最新的Google API已经发布,那么创建一个带有MapView的Fragment有什么最佳方法? MapView需要MapActivity才能正常工作。

让Activity来管理继承自MapActivity的Fragment(这是个不好的解决方案,因为它违反了Fragments自我封装的理念),并使用普通的基于xml的布局并不能起作用。我在MapActivity.setupMapView()中得到了一个NullPointerException:

E/AndroidRuntime(  597): Caused by: java.lang.NullPointerException
E/AndroidRuntime(  597):    at com.google.android.maps.MapActivity.setupMapView(MapActivity.java:400)
E/AndroidRuntime(  597):    at com.google.android.maps.MapView.(MapView.java:289)
E/AndroidRuntime(  597):    at com.google.android.maps.MapView.(MapView.java:264)
E/AndroidRuntime(  597):    at com.google.android.maps.MapView.(MapView.java:247)

我的第二个想法是以编程方式创建MapView,并将相关联的Activity(通过getActivity())作为Context传递给MapView构造函数。但这并不起作用:

E/AndroidRuntime(834): Caused by: java.lang.IllegalArgumentException: MapViews can only be created inside instances of MapActivity.
E/AndroidRuntime(834):     at com.google.android.maps.MapView.(MapView.java:291)
E/AndroidRuntime(834):     at com.google.android.maps.MapView.(MapView.java:235)
E/AndroidRuntime(834):     at de.foo.FinderMapFragment.onCreateView(FinderMapFragment.java:225)
E/AndroidRuntime(834):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:708)
E/AndroidRuntime(834):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:900)
E/AndroidRuntime(834):     at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:978)
E/AndroidRuntime(834):     at android.app.Activity.onCreateView(Activity.java:4090)
E/AndroidRuntime(834):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:664)

实际上应该有类似于MapFragment的东西可以处理MapView需要的后台线程,我猜...那么现在最好的做法是什么呢?

来自德国的问候, 瓦伦丁


2
我针对这个问题报告了一个功能请求。请给它点赞。http://code.google.com/p/android/issues/detail?id=15347 - Jeremy Edwards
12个回答

1

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接