最新バージョンの android-maps-extensions (2.2.0) と最新の Play サービス (6.5.87) およびサポート ライブラリ (21.0.3) に切り替えました。そして今、MapFragment を再利用できません。
私は NavigationDrawer で MainActivity を持っています。フラグメントの 1 つは、内部に GoogleMap フラグメントを含むフラグメントです。NavigationDrawer でフラグメントを切り替えると、フラグメント自体が再作成されます。以前は、これに対して非常に単純なソリューションを使用していました。私はすでに膨らんだビューを使用しました:
public View onCreateView(LayoutInflater inflater, ViewGroup container, final Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
if (view != null) {
ViewGroup parent = (ViewGroup) view.getParent();
if (parent != null) {
parent.removeView(view);
}
return view;
}
view = inflater.inflate(R.layout.fragment_map, container, false);
SupportMapFragment mapFragment = SupportMapFragment.newInstance();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.add(R.id.container, mapFragment).commit();
mapFragment.getExtendedMapAsync(new OnMapReadyCallback() {
public void onMapReady(GoogleMap googleMap) {
map = googleMap;
setupMap();
}
});
return view;
}
しかし、今はうまくいきません。このフラグメントが 2 回目に開いたときにマップが表示されません。
私はこの醜いコードを捨てることができます
if (view != null) {
ViewGroup parent = (ViewGroup) view.getParent();
if (parent != null) {
parent.removeView(view);
}
return view;
}
そして、常に内部でビューを再作成します。しかし、何千ものマーカーがあり (もちろん素晴らしいクラスタリングを使用)、それらを再描画するには多くの時間がかかります。
拡張ライブラリの問題ではないことはわかっています。Google マップも同じ動作をします。しかし、多分あなたは正しい決定を知っていますか?