0

有很多人在选项卡布局中使用新的 v2 地图片段时遇到问题 - 地图无法绘制,或者应用程序在选项卡离开和返回时崩溃。(此处的示例:第二次打开 SupportMapFragment 时出错,此处:Fragment 中的 MapFragment,替代品?

但是,我看到的解决方案对我来说效果不佳,因为我想要底部的几个选项卡,而在我的地图选项卡中,我想要地图顶部的下拉菜单、按钮和其他一些花哨的东西, 在选项卡内。

经过一番修补,我想出了一个似乎可以正常工作的解决方案,但我没有在其他任何地方看到它,而且我确实觉得它有点“hacky”,所以我正在寻求验证: )

1.. 我有一个 layout.xml(下面称为 R.layout.map),它描述了我的按钮、下拉菜单等,根本不引用任何地图(与大多数其他在 xml 中定义地图片段的解决方案不同)。

2.. 我的 MainActivity 具有通常的 tabhost/tabspec 例程来在许多地方详细说明的片段之间切换:

TabHost tabHost = (TabHost) findViewById(android.R.id.tabhost);
    tabHost.setup();
    addTab(this, tabHost, "home", R.string.label_tab_home, R.drawable.but_flag, MainFragment.class);
    addTab(this, tabHost, "map", R.string.label_tab_map, R.drawable.but_globe, MapFragment.class);

......

    tabHost.setOnTabChangedListener(this);

3.. 在我的 MapFragment 中,我扩展了 SupportMapFragment 而不是 Fragment 并做一些时髦的事情来让我的布局位于顶部。基本上,我将 SupportMapFragment 类转换为布局,以便我可以将布局添加为子视图。/

public class MapFragment extends SupportMapFragment{
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    FrameLayout mapView = (FrameLayout)super.onCreateView(inflater, container, savedInstanceState);
    LinearLayout mapcomponents = (LinearLayout) inflater.inflate(R.layout.map, container, false);
    mapView.addView(mapcomponents);
    return mapView;
}

我已经在几部手机上尝试了一段时间,它似乎确实有效。是的,我确实需要支持 2.1。

我担心的代码是,毫不奇怪,将从 SupportMapFragment 的 oncreateview 返回的视图转换为 FrameLayout,以便我可以添加我的“组件”布局。

这样做有什么问题吗?还有其他方法可以添加我错过的视图吗?

想法赞赏。

4

0 回答 0