Cómo evitar que se ejecute doble código haciendo clic dos veces rápido en un botón de Android

Si hago clic rápido en mi botón en mi aplicación de Android, parece que el código detrás de él se ejecuta dos veces. Si hago clic en mi botón de menú dos veces la actividad que tiene que ser lanzamiento onclick sólo comienza dos veces y tengo que dejar de hacerlo dos veces.

Esto es realmente molesto porque si hago clic demasiado rápido para los botones del menú puedo cargar un montón de actividades en el fondo y tengo que salir de ellos uno por uno, por lo que este es claramente un estado de buggy de mi aplicación quiero arreglar esto.

¿Qué puedo hacer con este problema?

Uso simples onClickListeners y botones

EDITAR:

Respecto a las respuestas y comentarios, mis botones de menú tienen este aspecto:

top20Button.setOnClickListener(new OnClickListener() { public void onClick(View v) { favButton.setClickable(false); nearButton.setClickable(false); highlightedButton.setClickable(false); top20Button.setClickable(false); Intent i = new Intent(); i.putExtra("showDialog", false); i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); i.setClass(Search.this, Top20.class); startActivity(i); finish(); } }); 

Después de toda esta corrección sigue siendo la misma: S Cuando hago clic como una persona loca múltiples actividades están en la pila de historia y tengo que salir varias veces.

Alguna sugerencia ? ¿Qué mi está haciendo mal?

Puede utilizar el siguiente código: btn.setEnabled (false);

 btn.setOnclickListener(new View.onClickListener(){ public void onClick(View v) { btn.setEnabled(false); } }); 

Puede desactivar la vista temporalmente de esta manera

 public static void disableTemporarly(final View view) { view.setEnabled(false); view.post(new Runnable() { @Override public void run() { view.setEnabled(true); } }); } 

Bueno, ese es el comportamiento esperado …

Inicie su nueva empresa con SINGLE_TOP flag

O intenta configurar android:launchMode="singleInstance" para la actividad Top20 en tu AndroidManifest.xml

Esto resuelve el problema de múltiples instancias de actividad y sigue reproduciendo la animación predeterminada

 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

Esta solución se adapta mejor a mis necesidades. En su lugar, utilizar la función de habilitar / deshabilitar la vista. Utilizo el tiempo, en primer lugar, crear una variable para almacenar la última vez que el usuario presionó la vista * luego cuando el usuario presiona la vista, capturar el tiempo en una variable para comparar el momento actual y la última vez que el usuario pulsó la vista, Si el tiempo diferencial entre los tiempos es demasiado pequeño, lo que significa rápido, o muy rápido simplemente ignorarlo y eso es todo. Pero si es un tiempo razonable para usted, establecer la última variable de tiempo con la hora actual y hacer cualquier otra cosa que desee hacer.

 @Override public void onListItemClick(ListView list, View item, int position, long id) { Long now = System.currentTimeMillis(); if((now - lastTimeSelected) > 500){ lastTimeSelected = now; // your code goes here } else { Log.i(TAG, "Too fast!"); } } 

Vi una respuesta similar en otro post, pero a nadie le gusta este enfoque.

Agregue el siguiente código snipet a su definición de actividad en Androidmanifest.xml

 android:launchMode = "singleTask" 

Utilizar variable frozen dentro de la clase de Application .

Es decir

 public class App extends Application { public static boolean frozen = false; } 

En algún lugar mientras hace clic:

 //... onClick() { if (frozen) { return; } frozen = true } //... 

En algún lugar para liberar, por ejemplo, cuando se ha lanzado una nueva Actividad

 onCreate (...) { super.onCreate(...); frozen = false; } 

En AndroidManifest.xml :

 <application android:allowBackup="true" android:largeHeap="true" android:name="com.example.App" android:icon="@drawable/icon" android:label="@string/app_alias" android:theme="@style/AppTheme" > 
  • ¿Cómo hacer que las esquinas de un botón alrededor?
  • Android EditText y el botón en la misma línea
  • Texto del botón no con varias líneas
  • Android: Añadir un botón personalizado a SearchView Widget en Actionbar
  • CheckingButton Recurso de fondo Id android
  • Atributo desconocido androide: elevación
  • Cómo configurar el color desactivado del botón con AppCompat?
  • Cómo implementar simple como botón en listview de cada elemento
  • ¿Cómo evitar que un fragmento se agregue varias veces?
  • Eliminar el relleno de texto en la vista de botón
  • ¿Cómo crear un botón circular en android con la imagen en el fondo?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.