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