|
||
|
![]() |
![]() |
Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
![]() |
|
Herramientas |
#1
|
||||
|
||||
Texto con delay
Buenas, me surge una pregunta que no he conseguido solucionar. Quiero cambiar un texto varias veces con algo de delay, en vez de una imagen de carga o algo similar.
Por ejemplo, cuando tu pulses un botón diga algo como: Calculando. se actualiza por Calculando... Se actualiza por "resultado" La cosa es que he intentado crear hilos y demás pero siempre me pone el último solo. Se os ocurre algún modo? Un saludo |
|
#2
|
||||
|
||||
Se podría hacer con un Handler. Puedes fijar el tiempo para que se ejecute el hilo que haga el cambio del texto; y del mismo modo para el segundo cambio.
|
#3
|
||||
|
||||
El código es el siguiente: Código:
public void responde() { // if (respuestasPersonalizas = false) { if (sino == 1) { respuesta.setText(R.string.yes); } else if (sino == 2) { respuesta.setText(R.string.no); } else { respuesta.setText(R.string.dontknow); } sino = 0; } //} public void pensar(View v){ respuesta.setText("Ummmm"); new Handler().postDelayed(new Runnable() { @override public void run() { runOnUiThread(new Runnable() { @override public void run() { responde(); } }); } }, 1000); } |
#5
|
||||
|
||||
Probablemente estás bloqueando el hilo principal, ¿al método pensar() dónde lo llamas? ¿Llamas a algo justo después que requiera mucho tiempo y no devuelva el control a Android? Si a Android no le devuelves el control no puede pintar el nuevo texto de la etiqueta por muchos setText que llames.
Si de verdad hay algo que tiene que pensar y lleva su tiempo, eso debería estar en una AsyncTask o en un hilo, y actualizar las etiquetas bien con el progress update de las asynctask o con un handler como haces. P.D: Sobre el Runnable que has puesto, aunque funciona no tiene sentido meter dentro el runOnUiThread pues el Handler ya se ejecuta en el UI Thread o hilo principal. Vamos, que esto es lo mismo y es menos lioso: Código:
new Handler().postDelayed(new Runnable() { @override public void run() { responde(); } }, 1000);
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
#6
|
||||
|
||||
Probablemente estás bloqueando el hilo principal, ¿al método pensar() dónde lo llamas? ¿Llamas a algo justo después que requiera mucho tiempo y no devuelva el control a Android? Si a Android no le devuelves el control no puede pintar el nuevo texto de la etiqueta por muchos setText que llames.
Si de verdad hay algo que tiene que pensar y lleva su tiempo, eso debería estar en una AsyncTask o en un hilo, y actualizar las etiquetas bien con el progress update de las asynctask o con un handler como haces. P.D: Sobre el Runnable que has puesto, aunque funciona no tiene sentido meter dentro el runOnUiThread pues el Handler ya se ejecuta en el UI Thread o hilo principal. Vamos, que esto es lo mismo y es menos lioso: Código:
new Handler().postDelayed(new Runnable() { @override public void run() { responde(); } }, 1000); ![]() |
#7
|
||||
|
||||
La pregunta no era qué hace el método pensar, sino si después hacías algo que pudiera bloquear el hilo de ejecución. ¿Dónde cambias el valor del contador que dices?
Otra cosa que puedes probar es poner respuesta.invalidate() después del setText(...). A veces Android no se da por aludido de que tiene que refrescar el texto.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Última edición por mocelet Día 12/01/16 a las 19:40:05. |
#8
|
||||
|
||||
La pregunta no era qué hace el método pensar, sino si después hacías algo que pudiera bloquear el hilo de ejecución. ¿Dónde cambias el valor del contador que dices?
Otra cosa que puedes probar es poner respuesta.invalidate() después del setText(...). A veces Android no se da por aludido de que tiene que refrescar el texto. ![]() Un saludo |
#9
|
||||
|
||||
La pregunta no era qué hace el método pensar, sino si después hacías algo que pudiera bloquear el hilo de ejecución. ¿Dónde cambias el valor del contador que dices?
Otra cosa que puedes probar es poner respuesta.invalidate() después del setText(...). A veces Android no se da por aludido de que tiene que refrescar el texto. ![]() |
![]() |
![]() |
||||||
|
Herramientas | |