0

J'étend mon application avec l'activité google map. il a créé une mapclass et étend FragmentActivity implémente OnMapReadyCallback.Accéder à l'objet GoogleMap d'une activité dans une autre activité

l'onMapReadyCallBack renvoie l'objet GoogleMap comme ci-dessous le code.

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { 

    public GoogleMap mMap; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_user); 
     // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
     SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 
    } 


    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     mMap = googleMap; 
     // Add a marker in Sydney and move the camera 
     LatLng sydney = new LatLng(-34, 151); 
     mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney")); 
     mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); 
    } 
} 

Je souhaite accéder à mMap sur ma classe MainActivity pour effectuer certaines opérations. Je crée un bouton avec l'attribut onclick à la méthode gotolocation. mais il renvoie une erreur car l'objet de la carte est nul; qui est le moyen approprié pour accéder à l'objet GoogleMap dans ma classe d'activité.

public void gotoLocation(View v){ 
    if (mMap != null){ 
     LatLng sydney = new LatLng(-34, 151); 
     mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Kabul")); 
     mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); 
    }else{ 
     Log.d("Map object", "It si null=============="); 
    } 
} 

Répondre

1

Gardez à l'esprit que seule une activité à la fois peut être affiché à l'utilisateur, donc il n'y a pas besoin d'accéder à la variable mMap de MainActivity.

En supposant que vous souhaitiez ouvrir MapsActivity lorsque vous cliquez sur le bouton gotoLocation(), vous pouvez transmettre les données associées à l'emplacement MainActivity à MapsActivity.

D'abord, préparer la LatLng et sa description dans MainActivity afin de l'envoyer à MapsActivity lorsque le bouton est cliqué:

public void gotoLocation(View v){ 
    LatLng goToLocation = new LatLng(34.5392354, 69.1378334); 

    Bundle args = new Bundle(); 
    args.putParcelable("latLon", goToLocation); 
    args.put("desc", "Marker in Kabul"); 

    Intent i = new Intent(this, MapsActivity.class); 
    i.putExtras(args); 
    startActivity(i); 
} 

Puis, quand MapsActivity est ouvert, il récupérera l'info, et modifier le marqueur en conséquence:

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { 

    public GoogleMap mMap; 
    LatLng mLatLng; 
    String mDescription; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_user); 

     //Get the data sent from MainActivity 
     Intent intent = getIntent(); 
     mLatLng = intent.getParcelableExtra("latLon"); 
     mDescription = intent.getStringExtra("desc"); 

     // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
     SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 
    } 


    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     mMap = googleMap; 

     //Use the data sent from MainActivity: 
     if (mLatLng != null) { 
      // Add a marker for location/description sent from MainActivity 
      mMap.addMarker(new MarkerOptions().position(mLatLng).title(mDescription)); 
      mMap.moveCamera(CameraUpdateFactory.newLatLng(mLatLng)); 
     } 
    } 
} 
+0

Danial Je suis d'accord avec vous cette façon, il fonctionne, mais la carte est un fragment et il est placé à l'intérieur du contenu utilisateur XML de la barre de navigation. J'essaye d'obtenir l'entrée de l'utilisateur dans la classe de navigation et de chand l'emplacement de carte. –