Google Maps Android APIを使用してアプリを開発しています。アプリは、ユーザーがオンとオフを切り替えることができるさまざまなタイル オーバーレイを表示します。デバイスを回転させてもオーバーレイはそのまま残りますが、ボタンをクリックしてオーバーレイをオフにすると、オーバーレイを制御する変数が null であるかのようにデバイスが動作します。このような状況でタイル オーバーレイを制御するにはどうすればよいですか。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SupportMapFragment mapFragment =
(SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
//mMap=null;
if (savedInstanceState == null) {
// First incarnation of this activity.
mapFragment.setRetainInstance(true);
} else {
// Reincarnated activity. The obtained map is the same map instance in the previous
// activity life cycle. There is no need to reinitialize it.
mMap = mapFragment.getMap();
}
setUpMapIfNeeded();
setUpFieldsIfNeeded();
}
private void setUpMapIfNeeded() {
// Do a null check to confirm that we have not already instantiated the map.
if (mMap == null) {
// Try to obtain the map from the SupportMapFragment.
mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
}
}
}
private void setUpFieldsIfNeeded(){
if (fieldsOverlay == null) {
TileProvider tileProvider = new UrlTileProvider(256, 256) {
@Override
public synchronized URL getTileUrl(int x, int y, int zoom) {
//String s = String.format(Locale.US, CMAFieldsRequestFormat, zoom, x, y);
String s = String.format(Locale.US, cartoDBFieldsTile, zoom, x, y);
s =s.replace(" ", "%20");
System.out.println(s);
URL url = null;
try {
url = new URL(s);
} catch (MalformedURLException e) {
throw new AssertionError(e);
}
return url;
}
};
fieldsOverlay = mMap.addTileOverlay(
new TileOverlayOptions().tileProvider(tileProvider));
fieldsOverlay.setVisible(false);
fieldsOverlay.setZIndex(1);}
}
TLDR: fieldsOverlay という名前の tileOverlay で Google マップを使用しています。デバイスを回転すると、オーバーレイ自体は保持されますが、変数 fieldsOverlay には接続されなくなります。この問題を解決する最善の方法は何ですか。
ありがとう
編集: mMap.clear を実行してから、レイヤーを再初期化し、アクティビティを再生するときに可視性を savedInstanceState 値に設定することで、アプリが希望どおりに機能するように見えるようにすることができましたが、これは良い解決策とは思えません.