安卓地图在恢复碎片后停止响应

3
以下是我控制地图的基本代码,稍后我会做一些非常高级的操作。一切都似乎很完美,直到 onResume()
这是布局,您可以通过一个活动中的多个片段浏览应用程序。此 mapFragment 包含在一个片段中。这很好用。但是,当我添加另一个片段并将其推送到后台堆栈时,当我以后回来时,地图无响应。
我尝试通过将我的调用移到 onResume() 中来解决这个问题,但这导致当我从 setViews() 中获取它时,gMaps = mapFragment.getMap(); 会为空。
我该如何处理这种情况?
    @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();
    }

尝试调用invalidate()。 - Gladi
嗨,我认为上面的代码可能还有另一个问题。我遇到了类似的情况,将 transaction.add( 替换为 transaction.replace( 似乎可以解决问题。我仍在测试中,所以我不能百分之百确定这是正确的修复方法,但也许这个提示会帮助其他人。 - Bianca Daniciuc
3个回答

7

你在logcat中看到了什么吗?我之前也遇到过类似的问题,我认为这与旧地图片段的View在创建新实例之前未从其父ViewGroup中移除有关。这导致了关于重复片段的错误。

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


就像你说的一样。谢谢。 - WIllJBD
很高兴能帮上忙,我的痛苦也有所值 ;) - Scott Stanchfield
我为同一个问题奋斗了3小时,这个解决方案对我有效。 - RAY

4
要实现Scott Stanchfield的解决方案: 在添加/替换另一个片段时调用cleanFrame()函数。
public void cleanFrame(){
FrameLayout FL = (FrameLayout) thisview.findViewById(R.id.myfragmentcontainer);
   FL.removeAllViewsInLayout();
}

0

我已经在manifest.xml文件中禁用了硬件加速,之后一切都成功地开始工作了:

<application android:hardwareAccelerated="false">
 ...
</application>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接