Ver la Versión Completa : Editar constantemente un TextView y se vaya mostrando.
erchant
13/07/14, 16:57:24
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...
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.
mocelet
13/07/14, 18:08:54
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
kriogeN
13/07/14, 18:32:32
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.
mocelet
13/07/14, 19:56:20
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.
erchant
14/07/14, 01:27:17
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??
mocelet
14/07/14, 08:08:25
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.
dolphinziyo
16/07/14, 14:55:21
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...
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.
mocelet
16/07/14, 15:19:55
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.
dolphinziyo
16/07/14, 23:17:50
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.
vBulletin® v3.8.1, Copyright ©2000-2026, Jelsoft Enterprises Ltd.