问题的根本原因是在activity重建或Configuration Change(例如方向变化)期间,地图片段被重新创建,由于重新创建导致所有之前添加的位置标记消失。下面是解决这个问题的一种方法。
private ArrayList markerOptionsList = new ArrayList<>();
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelableArrayList("markerOptionsList", markerOptionsList);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
markerOptionsList = savedInstanceState.getParcelableArrayList("markerOptionsList");
}
这样,当activity重建时,之前存储的标记列表将被还原。
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (savedInstanceState != null) {
markerOptionsList = savedInstanceState.getParcelableArrayList("markerOptionsList");
}
}
@Override
public void onMapReady(GoogleMap map) {
for (MarkerOptions markerOptions : markerOptionsList) {
map.addMarker(markerOptions);
}
}
这样,当地图片段重新创建后,之前保存的标记将被重新添加到地图上。
希望这可以帮助你解决你的问题!