studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android toast

para - manual de programacion android pdf



Cómo cancelar Toast (7)

Creo que no hay necesidad de crear una tostada personalizada.

Crear solo instancia única de la clase Toast . Simplemente configuramos el texto de la tostada usando toast.setText("string") , y llamamos toast.cancel() método onDestroy() en el método onDestroy() .

Fragmento de código de trabajo de la siguiente manera:

package co.toast; import android.annotation.SuppressLint; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class ShowToastActivity extends Activity { private Toast toast = null; Button btnShowToast; @SuppressLint("ShowToast") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // creates only one toast object.. toast = Toast.makeText(getApplicationContext(), "", Toast.LENGTH_LONG); btnShowToast = (Button) findViewById(R.id.btnShowToast); btnShowToast.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // only set text to toast object.. toast.setText("My toast!"); toast.show(); } }); } @Override protected void onDestroy() { toast.cancel(); super.onDestroy(); } @Override protected void onStop () { super.onStop(); toast.cancel(); } }

Espero que esto sea útil para usted ..

Desarrollé una aplicación para Android y estoy enfrentando un problema con Toast . Supongamos que estoy mostrando un Toast, se muestra en la ventana de la aplicación. Cuando aparece un cuadro de diálogo, el brindis no desaparece instantáneamente.

Quiero saber cómo puedo cancelar la tostada.


Este es un ejemplo básico utilizando el método cancel() de un Toast .

Toast mytoast; mytoast = Toast.makeText(getApplicationContext(), "Hi Ho Jorgesys! ", Toast.LENGTH_LONG); mytoast.show(); .... .... .... if(CancelToast){ mytoast.cancel(); }


La duración más corta que puede especificar para el brindis es Toast.LENGTH_SHORT que tiene un valor de 0 pero en realidad tiene una 2000 milliseconds long . Si lo quieres más corto que eso, prueba esto:

final Toast toast = Toast.makeText(ctx, "This message will disappear in 1 second", Toast.LENGTH_SHORT); toast.show(); Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { toast.cancel(); } }, 1000); //specify delay here that is shorter than Toast.LENGTH_SHORT


Ok, yo también estoy tratando de cancelar un Toast, y parece que no puedo obtener la llamada cancel () para ser invocado en Activity.onDestroy () o Activity.onStop (), etc. Después de una lectura de API-doc. y buscar en Google que necesiten ayuda para que se cancele Toast, creo que todavía no tengo claro cuándo se detienen, pausan, destruyen las Actividades. Necesito una forma segura de forzar mi actividad para que se detenga o se detenga.

En mi caso específico, dado que solo hay tostadas de corta y larga duración, decidí recorrer un bucle 5 veces haciendo un show () de una tostada de larga duración, por lo que permanecería en la pantalla durante 15-20 segundos. ¡Eso funciona bien!

Pero, el inconveniente (efecto secundario negativo) de usar un objeto Toast es que persisten incluso DESPUÉS de que el usuario abandone su aplicación y regrese a la pantalla de inicio y comience a usar otra aplicación ... su brindis va a vivir para la próxima 15-20 segundos, a menos que pueda garantizar que puede encontrar algún lugar (de alguna manera) para invocar cancel (). Además, ¡debes creer que Android honrará tu llamada para cancelar ()!

Entonces, para ese fin, he estado retocando mi simple bucle, tratando de invocar las cancelaciones directamente en el bucle, y probé que cumpliría una llamada de cancelación y se comportaría visualmente como se esperaba.

Fragmento de código: Nota: ''toast'' es una variable de INSTANCE pública, por lo que solo tenemos UNA instancia del objeto Toast [como se recomienda arriba, y que un comentarista confirmó que funcionaba hace dos años, en Activity onStop () y OnDestroy ( )]

toast = Toast.makeText(ctxt, result, Toast.LENGTH_LONG); for (int i=0; i < 5; i++) { // Long-toasts each last about 3.5 secs toast.show(); android.os.SystemClock.sleep(1500); toast.cancel(); android.os.SystemClock.sleep(1500); toast = Toast.makeText(ctxt, result, Toast.LENGTH_LONG); }

Ok, el bucle original contenía solo esa línea haciendo el show. Eso funciona, por sí mismo.

Pero para experimentar, agregué las siguientes cuatro líneas, para dormir durante aproximadamente la mitad del recorrido de 3.5 segundos, luego lo cancelo, duermo nuevamente por un segundo y medio y luego vuelvo a crear y mostrar el Toast nuevamente.

Esperaba ver la tostada durante aproximadamente 1,5 segundos, luego verla desaparecer y volver en otros 1,5 segundos, etc.

Adivina qué ... la tostada nunca aparece en absoluto!

Ok, estoy en modo de murmullo total ... ¿qué me falta para entender los misterios internos de cómo se implementa la clase Toast y se supone que se comporta?

Y, volviendo a mi primer número: ¿Cuál es la mejor manera de hacer que mi Actividad pase a un estado de pausa o parada?

[Nota: LEÍ este foro MUCHO ... ¡es genial! Esta es mi primera publicación en medio de una discusión de hilo ... Lo siento, mi respuesta se marca como RESPUESTA, en lugar de como una PREGUNTA relacionada con el tema de este hilo. ]


Utilice el método cancel de tost: toast.cancel ();


Toast.makeText devuelve un objeto Toast . Llame a cancel() en este objeto para cancelarlo.


Toast toast; private void showToast(String text) { if (toast!=null) toast.cancel(); toast = Toast.makeText(context, text, Toast.LENGTH_SHORT); toast.show(); }