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.
- Reemplazar el fondo del botón de Android DialogFragment
- icono de botón de cambio de android cuando se hace clic
- Cambiar el estilo del botón en toda la aplicación
- Borde de Android Menos Botón Presionado Estado Color de fondo
- Haga que un botón de Android cambie el fondo al hacer clic en XML
¿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?
- Orden de los botones OK / Cancel en ICS
- Android: Dibujo de un botón como spinner
- SetEnabled () vs setClickable (), ¿cuál es la diferencia?
- En Android, ¿cómo desactivar el botón de inicio de sesión con respecto a EditText?
- Botón de desactivación con selector de botones
- Color del fondo del botón del cambio del androide después de chascar
- Estilo un botón para que parezca un EditText (pero aún se comportan como un botón)
- ¿Cómo lograr el efecto de inclinación en Android como en Windows Phone?
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 ()