非推奨のgetMap
メソッドをgetMapAsync
に置き換えたいのですが、MapFragment
は使用しませんでしたが、GoogleMap
は次のように使用します。
private GoogleMap googleMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
try {
if(googleMap == null) {
googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
}
googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
googleMap.setMyLocationEnabled(true);
googleMap.setTrafficEnabled(true);
googleMap.setIndoorEnabled(true);
googleMap.setBuildingsEnabled(true);
googleMap.getUiSettings().setZoomControlsEnabled(true);
このようにgoogleMap
をMapFragment
に置き換えると、setMapType
などにできなくなります。私の場合、どのようにしてgetMapAsync
に変更できますか?
MapFragment mapFragment = (MapFragment) getFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
公式ドキュメントのように、get map asyncにはコールバックが必要です。 Googleマップのものの「メインエントリポイント」があります。
public class MapPane extends Activity implements OnMapReadyCallback {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.map_activity);
MapFragment mapFragment = (MapFragment) getFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap map) {
// DO WHATEVER YOU WANT WITH GOOGLEMAP
map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
map.setMyLocationEnabled(true);
map.setTrafficEnabled(true);
map.setIndoorEnabled(true);
map.setBuildingsEnabled(true);
map.getUiSettings().setZoomControlsEnabled(true);
}
}
非常に簡単です。アクティビティにOnMapReadyCallback
インターフェイスを実装させ、onMapReady()
コールバックでgoogleMap
参照を割り当てます。
次に、googleMap
で必要なアクションを実行します。
以下に簡単な例を示します。
public class MainActivity extends Activity implements OnMapReadyCallback {
private GoogleMap googleMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MapFragment mapFragment = (MapFragment) getFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap map) {
googleMap = map;
setUpMap();
}
public void setUpMap(){
googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
googleMap.setMyLocationEnabled(true);
googleMap.setTrafficEnabled(true);
googleMap.setIndoorEnabled(true);
googleMap.setBuildingsEnabled(true);
googleMap.getUiSettings().setZoomControlsEnabled(true);
}
}
MapFragmentを使用する場合、stMapTypeメソッドを使用できます。 OnMapReadyCallbackをアクティビティに実装します。 MapFragmentを作成し、そのオブジェクトでgetAsyncMapメソッドを呼び出します。 onMapReady(GoogleMap map)メソッドを追加して、マップタイプなどを設定できるようにします。それが役に立てば幸い。