2017-11-28 5 views
0

Ich mache eine App, mit der ein Benutzer auf Karte lange klicken und eine neue Aktivität öffnen kann, die es ihnen ermöglichen würde, ein neues Tag und Informationen darüber hinzuzufügen. Wenn der Benutzer einmal lange klickt, wenn er schnell genug ist, kann er zweimal auf die Karte klicken und die zweite Aktivität wird zweimal geöffnet. Ich versuche eine Möglichkeit zu finden, dieses Verhalten zu deaktivieren. Ich habe bereits einige Beispiele ausprobiert und versucht, Flags hinzuzufügen, aber es hatte keine Wirkung.Deaktivieren Sie die Reopening Activitiy mehrere Male auf der Karte Lange Klicks

Ich möchte den Benutzer zu lange zweimal klicken deaktivieren. Ich würde auch gerne einen Lader hinzufügen.

Kurz gesagt, was ich tun möchte ist: Deaktivieren Sie lange klicken, wenn Benutzer bereits lange auf die neue Aktivität zu öffnen, und aktivieren Sie es erneut, wenn die neue Aktivität geschlossen ist.

Meine Karten Fragment sieht wie folgt aus:

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

    @Override 
    public void onMapLongClick(final LatLng arg0) { 

     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); 

    } 
}); 

Und das ist die Tätigkeit, die er geöffnet, mit this und this Antworten versucht (unter anderem) ein Flag hinzuzufügen:

private void setRestaurant(final String userId, final String message, final String pickDate, final String pickTime, final String location, final String lat, final String lon, final String sendTo, final boolean enableComments) { 
    // Tag used to cancel the request 
    String tag_string_req = "req_add_restaurant"; 

    final String commentsEnabled = (enableComments) ? "0" : "1"; 

    pDialog.setMessage(getString(R.string.setting_a_restaurant)); 
    showDialog(); 

    ApiInterface apiService = 
      ApiClient.getClient().create(ApiInterface.class); 

    Call<DefaultResponse> call = apiService.addrestaurant(userId, message, lat, lon, pickDate, pickTime, sendTo, commentsEnabled); 
    call.enqueue(new Callback<DefaultResponse>() { 
     @Override 
     public void onResponse(Call<DefaultResponse> call, retrofit2.Response<DefaultResponse> response) { 

      // Launch main activity 
      Intent intent = new Intent(SetRestaurantActivity.this, 
        MainActivity.class); 
      // I TRIED TO BLOCK IT HERE 
      intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
      // I ALSO TRIED: 
      // intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
      startActivity(intent); 
      finish(); 

      Toast.makeText(getApplicationContext(), R.string.sucessfully_created_restaurant, Toast.LENGTH_LONG).show(); 
     } 
    }); 
} 

Antwort

2

Einfaches Hinzufügen Flagvariable. In diesem Fall verwende ich isRequestProcess Variable dafür.

Boolean isRequestProcess = false; 
mMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() { 

@Override 
public void onMapLongClick(final LatLng arg0) { 
    if(isRequestProcess){ 
     return; 
    } 
    isRequestProcess = 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); 
        isRequestProcess = false; 

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

      @Override 
      public void onErrorResponse(VolleyError error) { 
       int x = 1; 
      } 

     } 
    } 
} 
+0

Vielen Dank für Ihre Antwort Saheb. Das funktioniert bis zu einem gewissen Punkt. Es deaktiviert zwei Aktivitäten, die zur selben Zeit geöffnet werden, aber wenn ich zweimal klicke, öffnet es die neue Aktivität einmal, aber wenn ich es schließe, öffnet es sich wieder ... – Kemo

+0

Ich habe ProgressDialog anstelle von isRequestProcess benutzt und es funktioniert jetzt: 'ProgressDialog pd = ProgressDialog.show (dies, "", "Laden. Bitte warten ...", true); // Datei herunterladen pd.cancel(); ' – Kemo

Verwandte Themen