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.
- SetEnabled () vs setClickable (), ¿cuál es la diferencia?
- Alinear dos botones horizontalmente
- Clase común para el oyente de clics
- Cómo crear botones como Android Google Plus App
- Android: Creación de botones en fila
¿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?
- ¿Cómo crear un botón circular en android con la imagen en el fondo?
- Cree los botones de android mediante programación utilizando la disposición XML como plantilla
- Android: Botón con dos imágenes | alineación
- No se puede agregar una vista personalizada a la barra de acciones de Android, ¿por qué?
- NullPointerException en OnClickListener del botón
- Cómo cambiar el color del botón de color cuando se pulsa en Android?
- Cómo configurar el color desactivado del botón con AppCompat?
- Cómo deshabilitar completamente el botón de menú en android?
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" >
- ORMLite para Android: enlazar DAO con Roboguice
- BroadcastReceiver para CONNECTIVITY_ACTION devuelve siempre null en intention.getExtras ()