Home Menu

Menu



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  
Viejo 13/07/14, 16:57:24
Avatar de erchant
erchant erchant no está en línea
Usuario novato en la web
Mensajes: 2
 
Fecha de registro: jul 2014
Mensajes: 2
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
Editar constantemente un TextView y se vaya mostrando.

Bueno, tengo esta duda respectivamente tengo un textview y quiero ir cambiandolo en un ciclo for, pero que el cambio se vaya mostrando por pantalla...

El Error?

Bueno se cambia por dentro pero solo me muestra el ultimo textview.SetText ... el ultimo cambio es el que muestra por pantalla...

(Click para mostrar/ocultar)
public class Prueba2 extends ActionBarActivity {

TextView texto;
TextView texto2;
String numerostring;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_prueba2);
texto = (TextView) findViewById(R.id.textView1);
texto2 = (TextView) findViewById(R.id.textView1);
texto.setText("COMENZARA EL JUEGO");




}

@Override
public void onStart(){
super.onStart();
prueba();
prueba2();
}


public void prueba(){
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

texto.setText("CAMBIO");


} public void prueba2(){
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

texto2.setText("CAMBIppppO");
}



Por ejemplo por pantalla solo me aparece "CAMBIppppO", pero quiero que aparezca "CAMBIO", luego del retardo aparezca "CAMBIppppO".

Como??


Saludos y gracias de ante mano.
Responder Con Cita


  #2  
Viejo 13/07/14, 18:08:54
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
Hacer un Thread.sleep() en el hilo principal de ejecución es pecado capital, ¡paras la app completamente!

Te remito a mi respuesta en un hilo sobre el uso de handlers http://www.htcmania.com/showthread.php?t=708570
Responder Con Cita
  #3  
Viejo 13/07/14, 18:32:32
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
Para este caso creo que lo suyo es usar un AsyncTask y hacer la actualización en el onProgressUpdate.

Usando Handlers vas a tener que llamar al sendMessageDelayed en cada actualización del TextView, mientras que con el AsyncTask si que puedes poner el Thread.sleep en el doInBackground.
Responder Con Cita
  #4  
Viejo 13/07/14, 19:56:20
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
Las AsyncTask son para tareas cortas, más desde que cambiaron el executor por defecto que las encola y no necesariamente abre otro hilo cuando llega una tarea nueva.

Meter un sleep dentro me da el mismo respeto porque podría estar impidiendo la ejecución de otra tarea.

Para temporizar, en vez de enviar mensajes con el handler también se puede programar un Runnable que es incluso más limpio. Y si quiere un bucle que lo reprograme al final.
Responder Con Cita
  #5  
Viejo 14/07/14, 01:27:17
Avatar de erchant
erchant erchant no está en línea
Usuario novato en la web
Mensajes: 2
 
Fecha de registro: jul 2014
Mensajes: 2
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
SI eso no tengo problema, pero porque se me modifica y me muestra solo el ultimo cambio por pantalla y no me muestra los dos??
Responder Con Cita
  #6  
Viejo 14/07/14, 08:08:25
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
Cuando haces el primer setText, la próxima vez que se redibuje la pantalla pintará el texto nuevo. Pero esa vez nunca llega porque el sleep se ejecuta en el hilo principal (el que pinta, también llamado UI Thread) y bloquea la app.

Cuando el sleep acaba pones otro texto, de modo que cuando Android vuelve a tomar el control del hilo principal y pueda pintar la pantalla el texto es el último.
Responder Con Cita
  #7  
Viejo 16/07/14, 14:55:21
Avatar de dolphinziyo
dolphinziyo dolphinziyo no está en línea
Usuario poco activo
Mensajes: 32
 
Fecha de registro: may 2013
Mensajes: 32
Tu operador: Jazztel
Mencionado: 0 comentarios
Tagged: 0 hilos
Cita:
Originalmente Escrito por erchant Ver Mensaje
Bueno, tengo esta duda respectivamente tengo un textview y quiero ir cambiandolo en un ciclo for, pero que el cambio se vaya mostrando por pantalla...

El Error?

Bueno se cambia por dentro pero solo me muestra el ultimo textview.SetText ... el ultimo cambio es el que muestra por pantalla...

(Click para mostrar/ocultar)
public class Prueba2 extends ActionBarActivity {

TextView texto;
TextView texto2;
String numerostring;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_prueba2);
texto = (TextView) findViewById(R.id.textView1);
texto2 = (TextView) findViewById(R.id.textView1);
texto.setText("COMENZARA EL JUEGO");




}

@Override
public void onStart(){
super.onStart();
prueba();
prueba2();
}


public void prueba(){
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

texto.setText("CAMBIO");


} public void prueba2(){
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

texto2.setText("CAMBIppppO");
}



Por ejemplo por pantalla solo me aparece "CAMBIppppO", pero quiero que aparezca "CAMBIO", luego del retardo aparezca "CAMBIppppO".

Como??


Saludos y gracias de ante mano.
Estás ejecutando los dos métodos a la vez, por tanto la aplicación lo que hace es esperar 2 segundos y cuando recupera, los ejecuta a la vez, por tanto sólo verás el último.
Haz todo el proceso en un único método o cambia los tiempos de espera.
Responder Con Cita
  #8  
Viejo 16/07/14, 15:19:55
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
Cita:
Originalmente Escrito por dolphinziyo Ver Mensaje
Estás ejecutando los dos métodos a la vez, por tanto la aplicación lo que hace es esperar 2 segundos y cuando recupera, los ejecuta a la vez, por tanto sólo verás el último.
Haz todo el proceso en un único método o cambia los tiempos de espera.
No los está ejecutando a la vez porque es el mismo hilo de ejecución, hasta que prueba no acaba no se ejecuta prueba2. Si prueba o prueba2 crearan hilos podría ser lo que comentas, pero no es el caso.

La explicación al por qué el texto es el último es la de mi mensaje anterior: cuando Android recupera el control del hilo principal para pintar el texto, el valor actual es el último.
Responder Con Cita
  #9  
Viejo 16/07/14, 23:17:50
Avatar de dolphinziyo
dolphinziyo dolphinziyo no está en línea
Usuario poco activo
Mensajes: 32
 
Fecha de registro: may 2013
Mensajes: 32
Tu operador: Jazztel
Mencionado: 0 comentarios
Tagged: 0 hilos
Cita:
Originalmente Escrito por mocelet Ver Mensaje
No los está ejecutando a la vez porque es el mismo hilo de ejecución, hasta que prueba no acaba no se ejecuta prueba2. Si prueba o prueba2 crearan hilos podría ser lo que comentas, pero no es el caso.

La explicación al por qué el texto es el último es la de mi mensaje anterior: cuando Android recupera el control del hilo principal para pintar el texto, el valor actual es el último.
Tienes razón, error mío!¡ No sé por qué pero pensé que estaba usando hilos diferentes.
Responder Con Cita
Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Programación y Desarrollo para Android


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 01:07:26 (GMT +2)

Cookies
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007