好的,我刚遇到了同样的问题,并且在查看这个问题后认为,没有“好的”解决方法。
我的当前解决方案是延迟添加片段,让 Activity 在添加地图之前有机会渲染其他所有内容。
现在,我将地图嵌入到一个子片段中,所以我的代码看起来像这样:
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (isAdded()) {
FragmentManager fm = getChildFragmentManager();
GoogleMapFragment mapFragment = GoogleMapFragment
.newInstance();
fm.beginTransaction()
.replace(R.id.mapContainer, mapFragment).commit();
}
}
}, 1000);
如果直接添加到活动中,代码可能如下所示:
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (!isFinishing()) {
FragmentManager fm = getFragmentManager();
GoogleMapFragment mapFragment = GoogleMapFragment
.newInstance();
fm.beginTransaction()
.replace(R.id.mapContainer, mapFragment).commit();
}
}
}, 1000);
然而,在Runnable内部需要进行检查以确保我们不会尝试将地图添加到不存在的Activity或Fragment中。
我并不喜欢像这样的硬编码延迟,所以如果我有更好的方法,我会返回。1秒应该足够了,甚至可能会更少。