3

下面列出的是我控制地图的基本代码。我稍后会做一些非常高级的东西。一切似乎都很完美,直到onResume().

这是布局,您可以在 1 个带有多个片段的单个活动中浏览应用程序。这mapFragment包含在片段中。这工作正常。但是,当我添加另一个片段并将其推送到后堆栈时,当我稍后返回它时,地图没有响应。

我尝试通过将调用移至 来解决setupMaps();此问题,onResume()但是gMaps当我从gMaps = mapFragment.getMap();.setViews()

我该如何处理?

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        root = inflater.inflate(R.layout.fragment_maps, container, false);

        setupMaps();
        return root;
    }

    private void setupMaps()
    {
        gMaps = null;
        fm = getActivity().getSupportFragmentManager();

        mapFragment = SupportMapFragment.newInstance();
        android.support.v4.app.FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
        transaction.add(R.id.flMapContainer, mapFragment).commit();

    }


    @Override
    public void onResume()
    {
        super.onResume();

        mapFragment.onResume();
        setViews();
    }

    private void setViews()
    {
        gMaps = mapFragment.getMap();
        getData(); // initializes overlays, markers, polygons etc.
    }

    @Override
    public void onPause()
    {           
        mapFragment.onPause();
        super.onPause();
    }
4

3 回答 3

7

你在你的 logcat 中看到什么了吗?我以前遇到过这样的问题,我相信这与旧地图片段的视图在创建它的新实例之前没有从其父视图组中删除有关。这导致有关重复片段的错误。

在创建 SupportMapFragment 的新实例之前,尝试从 flMapContainer 中删除所有视图。

于 2013-05-07T05:25:27.557 回答
4

实现 Scott Stanchfield 的解决方案:在添加/替换另一个片段时调用 cleanFrame()。

public void cleanFrame(){
FrameLayout FL = (FrameLayout) thisview.findViewById(R.id.myfragmentcontainer);
   FL.removeAllViewsInLayout();
}
于 2013-05-19T15:56:30.397 回答
0

我在内部禁用了硬件加速manifest.xml,之后一切都开始成功:

<application android:hardwareAccelerated="false">
 ...
</application>
于 2014-01-29T16:49:07.087 回答