There is an activit in which I implement the getMap() method, but since it is depricated I cannot fully implement it. I found several solutions to this problem, one of them was to implement the getMapAsync() method instead of it, then implement the OnMapReadyCallback interface, along with the onMapReady method onMapReady . The problem is that I don’t know what exactly to cram in there (I think the markers themselves, but they are interconnected in onCreate ) and the most important thing is how to correctly modify my class. Tell me how to be.

 public class MainActivity extends Activity { private ViewGroup infoWindow; private TextView infoTitle; private TextView infoSnippet; private Button infoButton; private OnInfoWindowElemTouchListener infoButtonListener; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final MapFragment mapFragment = (MapFragment)getFragmentManager().findFragmentById(R.id.map); final MapWrapperLayout mapWrapperLayout = (MapWrapperLayout)findViewById(R.id.map_relative_layout); final GoogleMap map = mapFragment.getMap(); // MapWrapperLayout initialization // 39 - default marker height // 20 - offset between the default InfoWindow bottom edge and it's content bottom edge mapWrapperLayout.init(map, getPixelsFromDp(this, 39 + 20)); // We want to reuse the info window for all the markers, // so let's create only one class member instance this.infoWindow = (ViewGroup)getLayoutInflater().inflate(R.layout.info_window, null); this.infoTitle = (TextView)infoWindow.findViewById(R.id.title); this.infoSnippet = (TextView)infoWindow.findViewById(R.id.snippet); this.infoButton = (Button)infoWindow.findViewById(R.id.button); // Setting custom OnTouchListener which deals with the pressed state // so it shows up this.infoButtonListener = new OnInfoWindowElemTouchListener(infoButton, getResources().getDrawable(R.drawable.round_but_green_sel), //btn_default_normal_holo_light getResources().getDrawable(R.drawable.round_but_red_sel)){ //btn_default_pressed_holo_light @Override protected void onClickConfirmed(View v, Marker marker) { // Here we can perform some action triggered after clicking the button Toast.makeText(MainActivity.this, marker.getTitle() + "'s button clicked!", Toast.LENGTH_SHORT).show(); } }; this.infoButton.setOnTouchListener(infoButtonListener); map.setInfoWindowAdapter(new InfoWindowAdapter() { @Override public View getInfoWindow(Marker marker) { return null; } @Override public View getInfoContents(Marker marker) { // Setting up the infoWindow with current's marker info infoTitle.setText(marker.getTitle()); infoSnippet.setText(marker.getSnippet()); infoButtonListener.setMarker(marker); // We must call this to set the current marker and infoWindow references // to the MapWrapperLayout mapWrapperLayout.setMarkerWithInfoWindow(marker, infoWindow); return infoWindow; } }); // Let's add a couple of markers map.addMarker(new MarkerOptions() .title("India") .snippet("New Delhi") .position(new LatLng(20.59, 78.96))); map.addMarker(new MarkerOptions() .title("Prague") .snippet("Czech Republic") .position(new LatLng(50.08, 14.43))); map.addMarker(new MarkerOptions() .title("Paris") .snippet("France") .position(new LatLng(48.86,2.33))); map.addMarker(new MarkerOptions() .title("London") .snippet("United Kingdom") .position(new LatLng(51.51,-0.1))); } public static int getPixelsFromDp(Context context, float dp) { final float scale = context.getResources().getDisplayMetrics().density; return (int)(dp * scale + 0.5f); } } 
  • And what's the problem of transferring the addition of markers in onMapReady? - YurySPb
  • @YuriSPb it turns out you need to transfer everything from the line `mapWrapperLayout.init (map, getPixelsFromDp (this, 39 + 20));` but then again it turns out not quite correctly. - Inkognito
  • Why not correct? - Yuriy SPb
  • @YuriSPb moved, but in the line `final GoogleMap map = mapFragment.getMapAsync (); `gives the error: getMapAsync (OnMapReadyCallback) in MapFragment cannot be applied to () - Inkognito
  • Well, give back an anonymous calbusback implementation - YuriySPb

1 answer 1

When you implement the OnMapReadyCallback interface, you need to implement the onMapReady (GoogleMap googleMap) method, which will be called as soon as the map is ready for the robot. Actually there and you can add markers.

 final GoogleMap map = mapFragment.getMapAsync(); 

It gives an error because mapFragment.getMapAsync () returns void, and as an argument you must accept onMapReadyCallback, that is, your activation, which implements it.

You can make a global variable private GoogleMap mMap, and in the onMapReady (GoogleMap googleMap) method find your map.

 @Override public void onMapReady(GoogleMap googleMap){ mMap = googleMap; //остальной код } 
  • Where to download the library so that it has the OnMapReadyCallback interface? - Devel0