0

Ich habe eine Karte, wo der Benutzer die Option hat, lange zu klicken und einen Marker hinzuzufügen (er öffnet die neue Aktivität mit Absicht, so dass er Informationen über den Marker hinzufügen kann). Ich hatte ein Problem mit mehreren langen Klicks und eröffnete mehrere neue Aktivitäten. Ich fand this Lösung, und war in der Lage, mehrere lange Klicks zu blockieren, aber das Zurücksetzen langer Klicks, nachdem der Benutzer neue Aktivität geöffnet hat, funktionierte nicht für mich.Erneute Aktivierung eines langen Klicks auf die Karte

Meine Karten Fragment:

//Add marker on long click 
mMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() { 

    @Override 
    public void onMapLongClick(final LatLng arg0) { 
     // disabling long click 
     mMap.setOnMapLongClickListener(null); 

     RequestQueue queue = Volley.newRequestQueue(getActivity()); 
        String url = "https://maps.googleapis.com/maps/api/geocode/json?latlng=" + String.valueOf(arg0.latitude) + "," + String.valueOf(arg0.longitude) + "&key=myKey"; 

     // Request a string response from the provided URL. 
     StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { 
      @Override 
      public void onResponse(String response) { 
       try { 
        JSONArray jObj = new JSONObject(response).getJSONArray("results").getJSONObject(0).getJSONArray("address_components"); 

        Intent intent = new Intent(getActivity(), AddRestaurantActivity.class); 

         for (int i = 0; i < jObj.length(); i++) { 
          String componentName = new JSONObject(jObj.getString(i)).getJSONArray("types").getString(0); 
          if (componentName.equals("postal_code") || componentName.equals("locality") || componentName.equals("street_number") || componentName.equals("route") 
                || componentName.equals("neighborhood") || componentName.equals("sublocality") || componentName.equals("administrative_area_level_2") 
                || componentName.equals("administrative_area_level_1") || componentName.equals("country")) { 
               intent.putExtra(componentName, new JSONObject(jObj.getString(i)).getString("short_name")); 
          } 
         } 

         intent.putExtra("latitude", arg0.latitude); 
         intent.putExtra("longitude", arg0.longitude); 

         startActivity(intent); 

        } catch (JSONException e) { 
       e.printStackTrace(); 
       } 
      } 
    }, new Response.ErrorListener() { 

    @Override 
    public void onErrorResponse(VolleyError error) { 
     int x = 1; 
    } 
}); 
// Add the request to the RequestQueue. 
queue.add(stringRequest); 

    } 
}); 

Antwort

0

eine Abhilfe gefunden - ich ProgressDialog verwendet Benutzer zu deaktivieren zweimal longclick:

GoogleMap.OnMapLongClickListener onMapLongClickListener =new GoogleMap.OnMapLongClickListener() { 
     @Override 
     public void onMapLongClick(LatLng latLng) { 

      ProgressDialog pd = ProgressDialog.show(this,"","Loading. Please wait...",true); 

      RequestQueue queue = Volley.newRequestQueue(getActivity()); 
      String url = "https://maps.googleapis.com/maps/api/geocode/json?latlng=" + String.valueOf(arg0.latitude) + "," + String.valueOf(arg0.longitude) + "&key=myKey"; 

      // Request a string response from the provided URL. 
      StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 
        try { 
         JSONArray jObj = new JSONObject(response).getJSONArray("results").getJSONObject(0).getJSONArray("address_components"); 

         Intent intent = new Intent(getActivity(), AddRestaurantActivity.class); 

         for (int i = 0; i < jObj.length(); i++) { 
          String componentName = new JSONObject(jObj.getString(i)).getJSONArray("types").getString(0); 
          if (componentName.equals("postal_code") || componentName.equals("locality") || componentName.equals("street_number") || componentName.equals("route") 
           || componentName.equals("neighborhood") || componentName.equals("sublocality") || componentName.equals("administrative_area_level_2") 
           || componentName.equals("administrative_area_level_1") || componentName.equals("country")) { 
           intent.putExtra(componentName, new JSONObject(jObj.getString(i)).getString("short_name")); 
          } 
         } 

         intent.putExtra("latitude", arg0.latitude); 
         intent.putExtra("longitude", arg0.longitude); 

         startActivity(intent); 
         pd.cancel(); 

         mMap.setOnMapLongClickListener(onMapLongClickListener); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      }, new Response.ErrorListener() { 

       @Override 
       public void onErrorResponse(VolleyError error) { 
        pd.cancel(); 
       } 
      }); 
      // Add the request to the RequestQueue. 
      queue.add(stringRequest); 
     } 
    }; 
2

einen Listener für das lange Klick erstellen, zB:

GoogleMap.OnMapLongClickListener onMapLongClickListener =new GoogleMap.OnMapLongClickListener() { 
     @Override 
     public void onMapLongClick(LatLng latLng) { 

      mMap.setOnMapLongClickListener(null); 

      RequestQueue queue = Volley.newRequestQueue(getActivity()); 
      String url = "https://maps.googleapis.com/maps/api/geocode/json?latlng=" + String.valueOf(arg0.latitude) + "," + String.valueOf(arg0.longitude) + "&key=myKey"; 

      // Request a string response from the provided URL. 
      StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 
        try { 
         JSONArray jObj = new JSONObject(response).getJSONArray("results").getJSONObject(0).getJSONArray("address_components"); 

         Intent intent = new Intent(getActivity(), AddRestaurantActivity.class); 

         for (int i = 0; i < jObj.length(); i++) { 
          String componentName = new JSONObject(jObj.getString(i)).getJSONArray("types").getString(0); 
          if (componentName.equals("postal_code") || componentName.equals("locality") || componentName.equals("street_number") || componentName.equals("route") 
           || componentName.equals("neighborhood") || componentName.equals("sublocality") || componentName.equals("administrative_area_level_2") 
           || componentName.equals("administrative_area_level_1") || componentName.equals("country")) { 
           intent.putExtra(componentName, new JSONObject(jObj.getString(i)).getString("short_name")); 
          } 
         } 

         intent.putExtra("latitude", arg0.latitude); 
         intent.putExtra("longitude", arg0.longitude); 

         startActivity(intent); 
         mMap.setOnMapLongClickListener(onMapLongClickListener); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      }, new Response.ErrorListener() { 

       @Override 
       public void onErrorResponse(VolleyError error) { 
        int x = 1; 
       } 
      }); 
      // Add the request to the RequestQueue. 
      queue.add(stringRequest); 
     } 
    }; 

und an Ihrem onMapReady, setListener für onMapLongClickListener:

mMap.setOnMapLongClickListener(onMapLongClickListener); 

können Sie Deaktivieren Sie LongClicklistener gemäß dem vorherigen Code, den Sie verwenden, und fügen Sie den Listener hinzu, wenn Sie bzw. Onse, Code sind in meinem onMapLongClick() enthalten, müssen Sie nur den Code kopieren und Hörer auf OnMapReady() hinzufügen, wie ich oben erwähnt.

Lassen Sie mich wissen, ob es Ihr Problem löst oder nicht.

+0

Sie Sachin danken. Ich werde es heute Nacht versuchen und dich wissen lassen, und deine Antwort akzeptieren, wenn es funktioniert :) – Kemo

+0

Sicher, lass es mich wissen, wenn es nicht funktioniert .. –

+0

Ich werde :) Danke nochmal für deine Antwort – Kemo

Verwandte Themen