下面列出了我控制地图的基本代码。我稍后会做一些非常高级的东西。在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();
}
为空1}}。
我该如何处理?
{{1}}
答案 0 :(得分:7)
你在logcat中看到了什么吗?我之前遇到过类似的问题,我认为它与旧的地图片段的View在创建新的实例之前没有从其父ViewGroup中删除有关。这导致了重复片段的错误。
在创建SupportMapFragment的新实例之前,请尝试从flMapContainer中删除所有视图。
答案 1 :(得分:4)
实施Scott Stanchfield的解决方案: 在添加/替换另一个片段时调用cleanFrame()。
public void cleanFrame(){
FrameLayout FL = (FrameLayout) thisview.findViewById(R.id.myfragmentcontainer);
FL.removeAllViewsInLayout();
}
答案 2 :(得分:0)
我在manifest.xml
内禁用了硬件加速,之后一切开始成功:
<application android:hardwareAccelerated="false">
...
</application>