android - fragment 中的 MapView(蜂窝)

标签 android google-maps android-fragments android-maps android-3.0-honeycomb

现在最终的 SDK 已经与 google api 一起发布了 - 使用 MapView 创建 Fragment 的最佳方法是什么? MapView 需要一个 MapActivity 才能正常工作。

让 Activity 管理 Fragments 从 MapActivity 继承(不好的解决方案,因为它违背了 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())作为上下文传递给 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 需要的后台线程我猜......那么目前的最佳做法是什么?

来自德国的感谢和问候, 瓦伦丁

最佳答案

我已经设法通过在 fragment 中使用 TabHost 来解决这个问题。

这是想法(简要):

  1. MainFragmentActivity 扩展了 FragmentActivity(来自支持库)并具有 MapFragment

  2. MyMapActivity 扩展 MapActivity并包含 MapView .

  3. LocalActivityManagerFragment 主机 LocalActivityManager

  4. MapFragment 扩展了 LocalActivityManagerFragment

  5. 还有LocalActivityManager包含 MyMapActivity Activity 。

示例实现:https://github.com/inazaruk/map-fragment .


enter image description here

关于android - fragment 中的 MapView(蜂窝),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5109336/

相关文章:

Android ActionBar 选项卡设置最初选择的选项卡

android - 我的首选项屏幕搞砸了

android - 弹出窗口返回键事件

javascript - 无法返回地理编码 latLng

javascript - Http 站点未检测到 Chrome 中的位置 - 问题

android - 使用 ViewPager 防止预加载下一个 fragment (选项卡)

Android: fragment 之间跳转的正确方式

android - 我可以在测试项目中创建 Activity stub 吗?

javascript - 如何将谷歌地图对象重新附加到 DOM?

java - 保存和检索 v4 fragment 状态