2017-05-07 4 views
1

J'ai mis en place une carte personnalisée qui permet aux utilisateurs d'ajouter des marqueurs aux préférences partagés à l'aide à long clic, enfin je l'ai eu à travailler. Sur ma carte, j'ai un bouton qui appelle une méthode "Clear Marker" quand le bouton est pressé. Je suis nécessaire pour quitter la carte et l'ouvrir à nouveau pour que les changements soient faits. Je voudrais que la carte soit mise à jour instantanément et existe-t-il un moyen de supprimer le dernier élément ajouté aux préférences partagées? IE effacer le marqueur précédent, pas tous les marqueurs ajoutés. Le code utilisé pour stocker un marqueur estUtilisation des préférences partagées pour supprimer un marqueur à la fois

@Override 
public void onMapLongClick(LatLng latLng) { 
    addressEditText = (EditText) findViewById(R.id.editTextAddMarker); 
    title12 = addressEditText.getText().toString(); 

    if (title12.length() > 2) { 
     MarkerOptions markerOpt1 = new MarkerOptions() 
       .title(title12) 
       .anchor(0.5f, 0.5f); 
     markerOpt1.position(latLng); 

     mMap.addMarker(markerOpt1); 
     Toast.makeText(this, "Marker Added", Toast.LENGTH_LONG).show(); 


     locationCount++; 

     /** Opening the editor object to write data to sharedPreferences */ 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 

     // Storing the latitude for the i-th location 
     editor.putString("lat" + Integer.toString((locationCount - 1)), Double.toString(latLng.latitude)); 

     // Storing the longitude for the i-th location 
     editor.putString("lng" + Integer.toString((locationCount - 1)), Double.toString(latLng.longitude)); 
     //editor.putString("title", addressEditText.getText().toString()); 
     editor.putString("title" + (locationCount-1), addressEditText.getText().toString()); 


     // Storing the count of locations or marker count 
     editor.putInt("locationCount", locationCount); 

     /** Saving the values stored in the shared preferences */ 
     editor.commit(); 

    } else if (title12.length() < 1) { 
     Toast.makeText(this, "Enter title at the top left.", Toast.LENGTH_LONG).show(); 
    } 
} 

je récupère ensuite les données des préférences partagées et dessine sur la carte dans mon onMapReady()

// Opening the sharedPreferences object 
    sharedPreferences = getSharedPreferences("location", 0); 

    // Getting number of locations already stored 
    locationCount = sharedPreferences.getInt("locationCount", 0); 


    // If locations are already saved 
    if (locationCount != 0) { 

     String lat = ""; 
     String lng = ""; 
     String title13 = ""; 

     // Iterating through all the locations stored 
     for (int i = 0; i < locationCount; i++) { 

      // Getting the latitude of the i-th location 
      lat = sharedPreferences.getString("lat" + i, "0"); 

      // Getting the longitude of the i-th location 
      lng = sharedPreferences.getString("lng" + i, "0"); 

      SharedPreferences myPrefs = PreferenceManager.getDefaultSharedPreferences(this); 
      title13 = sharedPreferences.getString("title" + i, "0"); 


      //Toast.makeText(this, lat + "," + lng, Toast.LENGTH_LONG).show(); 

      double lat3 = Double.valueOf(lat).doubleValue(); 
      double lng3 = Double.valueOf(lng).doubleValue(); 

      position1 = new LatLng(lat3, lng3); 
      drawMarker(position1,title13); 
     } 

    } 

Enfin, le code utilisé pour enlever le marqueur (Le problème est ici). Les marqueurs ne sont pas retirés de la carte après avoir appuyé sur le bouton, seulement lorsque l'utilisateur appuie sur le bouton et retourne à la carte. Aussi, il efface les préférences partagées, quelqu'un sait-il comment je peux simplement supprimer le dernier élément ajouté?

private void clearMarker() { 
    // Opening the editor object to delete data from sharedPreferences 
    SharedPreferences.Editor editor = sharedPreferences.edit(); 

    // Clearing the editor 
    editor.clear(); 

    // Committing the changes 
    editor.commit(); 
} 

}

ci-dessus est appelé à "onclick" via un bouton. Est ce que quelqu'un sait comment accomplir cela? Toute aide sera grandement appréciée.

Répondre

0

La signature de la méthode pour addMarker est:

public final Marker addMarker (MarkerOptions options) 

Il retourne l'objet Marker qui est créé sur la carte.

Dans votre cas, remplacez

mMap.addMarker(markerOpt1); 

avec

Marker marker = mMap.addMarker(markerOpt1); 

Vous pouvez ensuite stocker cet objet Marker dans votre SharedPreferences au lieu de stocker la latitude et la longitude. Vérifiez this réponse pour les instructions.

Cela vous permet d'appeler Marker.remove() sur l'objet Marker vous récupérez de la SharedPreferences dans votre méthode clearMarker() pour supprimer ce marqueur particulier de la carte.

+0

Pouvez-vous expliquer ce que je dois changer ou ajouter exactement? Ou les étapes que je dois suivre pour y parvenir? Je suis encore en train de développer des compétences en programmation/android et j'ai encore un long chemin à parcourir. Tous les conseils dans la bonne direction seraient grandement appréciés. – MichaelCS

+0

J'ai modifié la réponse pour inclure plus de détails. J'espère que cela aide :) –