使用TabHost片段的MapActivity

时间:2012-07-31 21:38:23

标签: android android-fragments android-tabhost mapactivity

我是iOS人试图转移到Android,我需要有人来解释/帮助我在这种情况下该怎么做。我有一个带tabhost片段的应用程序(3个标签)。此刻,我只加载3个不同的简单片段,它工作正常。

现在,我想在第一个选项卡上实现MapActivity。不幸的是,我无法将其扩展到MapActivity。它目前扩展到Fragment。

我在互联网上搜索,但可以找到完美的解决方案。

这个link是解决方案之一,但它使用了不推荐使用的LocalActivityManager。

我的问题是我可以将2个片段和一个单独的活动加载到片段tabhost中。如果有可能,请告诉我如何实现它?

注意:我在此tutorial上构建了我的app tabhost片段。

百万感谢我。

1 个答案:

答案 0 :(得分:1)

我认为一个解决方案是使用支持库的这个修改版本FragmentActivity扩展MapActivity而不是Activity:

https://github.com/petedoyle/android-support-v4-googlemaps

请记住,您需要在Activity类中创建MapView对象,并以这种方式将其传递给片段:

public class MyMapActivity extends FragmentActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Exchanger.sMapView = new MapView(this, "your_api_key");

    }

    public static class Exchanger {
        public static MapView sMapView;
    }
}

和片段将是

public class MapFragment extends Fragment {

    @Override
    public void onCreate(Bundle args) {
        super.onCreate(args);
        setRetainInstance(true);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup vg, Bundle data) {

        final ViewGroup parent = (ViewGroup) MyMapActivity.Exchanger.sMapView.getParent();
        if (parent != null)
            parent.removeView(MyMapActivity.Exchanger.sMapView);

        return MyMapActivity.Exchanger.mMapView;
    }

}

MyMapActivity是您关联的教程中的TabsFragmentActivity。 请记住使用支持库(download link

的修改版本

现已弃用上述方法。 您现在可以使用MapFragment: http://developer.android.com/google/play-services/maps.html