恢复片段后android地图停止响应
Posted
技术标签:
【中文标题】恢复片段后android地图停止响应【英文标题】:android maps stop responding after resuming fragment 【发布时间】:2013-04-30 20:38:21 【问题描述】:下面列出的是我控制地图的基本代码。我稍后会做一些非常高级的东西。一切似乎都很完美,直到onResume()
。
这是布局,您可以在 1 个带有多个片段的单个 Activity 中浏览应用程序。这个mapFragment
包含在片段中。这工作正常。但是,当我添加另一个片段并将其推送到后堆栈时,当我稍后返回它时,地图没有响应。
我尝试通过将我对setupMaps();
的调用移动到onResume()
来解决此问题,但是当我从gMaps = mapFragment.getMap();
中的setViews()
获取它时,这导致gMaps
为空。
我应该如何处理?
@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() 嗨,我认为上面的代码可能还有另一个问题。我也有类似的情况,用transaction.replace(
替换transaction.add(
似乎可以解决问题。我仍在测试它,所以我不能 100% 确定这是正确的解决方法,但也许这个提示会对其他人有所帮助。
【参考方案1】:
你在你的 logcat 中看到了什么吗?我以前遇到过类似的问题,我相信这与旧地图片段的视图在创建新实例之前没有从其父视图组中删除有关。这导致有关重复片段的错误。
在创建 SupportMapFragment 的新实例之前,尝试从 flMapContainer 中删除所有视图。
【讨论】:
正如你所说。谢谢。 我的荣幸!很高兴我的痛苦能帮上忙;) 我在同一个问题上解决了 3 个小时,这个解决方案对我有用【参考方案2】:实施 Scott Stanchfield 的解决方案: 添加/替换另一个片段时调用 cleanFrame()。
public void cleanFrame()
FrameLayout FL = (FrameLayout) thisview.findViewById(R.id.myfragmentcontainer);
FL.removeAllViewsInLayout();
【讨论】:
【参考方案3】:我在manifest.xml
中禁用了硬件加速,之后一切都开始成功:
<application android:hardwareAccelerated="false">
...
</application>
【讨论】:
以上是关于恢复片段后android地图停止响应的主要内容,如果未能解决你的问题,请参考以下文章
Aurora R4显示器驱动以停止响应。GTX 680 双显卡。