Tabhost / Tabspec,具有自定义布局的SupportMapFragment,此解决方案是否有效?

时间:2013-06-06 22:47:03

标签: android google-maps android-layout android-tabhost supportmapfragment

有很多人在选项卡布局中使用新的v2 mapfragment时遇到了问题 - 地图不会绘制,或者当选项卡离开时,应用程序会崩溃。 (例如:Error opening SupportMapFragment for second time和此处:MapFragment in Fragment, alternatives?

我见过的解决方案对我来说不会那么好,但是,因为我想要底部的几个标签,而在我的地图标签中,我想要下拉,按钮和其他一些花哨的东西选项卡中的地图。

经过一些修修补补后,我想出了一个似乎工作正常的解决方案,但我还没有看到它在其他任何地方提到过,而且我觉得它在'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返回的View转换为FrameLayout也就不足为奇了,这样我就可以将“components”-layout添加到它。

这样做有什么问题吗?还有另一种方法来添加我错过的视图吗?

赞赏的想法。

0 个答案:

没有答案