我搜索了stackoverflow并查看了很多解决方案,例如 here
我已经看过更多,但在性能方面没有一个强大。 这是我到目前为止所得到的
这个可以工作,但只有一次片段首次创建但后来返回到地图片段后,它给了我布局通胀异常
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
view=inflater.inflate(R.layout.fragment_public_maps,null,false);
googleMap= (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.pub_map);
googleMap.getMapAsync(this);
return view;
}
我也尝试了这个,它可以工作,但它使我的应用程序变慢,有时崩溃
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
try
{
view=inflater.inflate(R.layout.fragment_public_maps,null,false);
}
catch (InflateException e)
{
googleMap= (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.pub_map);
googleMap.getMapAsync(this);
return view;
}
googleMap= (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.pub_map);
googleMap.getMapAsync(this);
return view;
}
如果有人能指出正确的方向,我不知道还能做什么我真的很感激。
答案 0 :(得分:1)
我这样做并且效果很好的是将FrameLayout放在片段xml文件中,如下所示:
<FrameLayout
android:id="@+id/map_id"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
然后在您的片段onActivityCreated方法中执行此操作:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mMapFragment = MapFragment.newInstance();
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN) {
getChildFragmentManager().beginTransaction().replace(R.id.map_id, mMapFragment).commit();
} else {
getFragmentManager().beginTransaction().replace(R.id.map_id, mMapFragment).commit();
}
mMapFragment.getMapAsync(this);
}
如果您正在使用支持片段,
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mMapFragment = SupportMapFragment.newInstance();
getSupportFragmentManager().beginTransaction().replace(R.id.sod_map_lite, mMapFragment).commit();
}