studio - Android establece la visibilidad de un botón en el temporizador
manual de programacion android pdf (2)
Tengo una aplicación que muestra un descargo de responsabilidad al comienzo del programa. Quiero que un botón permanezca invisible durante un tiempo determinado y luego se vuelva visible. Configuré un hilo que duerme durante 5 segundos y luego trato de hacer que el botón sea visible. Sin embargo, obtengo este error cuando ejecuto mi código:
08-02 21: 34: 07.868: ERROR / AndroidRuntime (1401): android.view.ViewRoot $ CalledFromWrongThreadException: solo el subproceso original que creó una jerarquía de vista puede tocar sus vistas.
¿Cómo puedo contar 5 segundos y luego hacer que el botón sea visible? Gracias.
Thread splashTread = new Thread() {
@Override
public void run() {
try {
int waited = 0;
while(_active && (!_ok2)) {
sleep(100);
if(_active) {
waited += 100;
if(waited >= _splashTime)
{
turnButtonOn();
}
}
}
} catch(InterruptedException e) {
// do nothing
} finally {
finish();
startActivity(new Intent("com.lba.mixer.Choose"));
}
};
splashTread.start();
public static void turnButtonOn() {
okButton.setVisibility(View.VISIBLE);
}
El problema es que no está en el hilo de la interfaz de usuario cuando llama a okButton.setVisibility(View.VISIBLE);
, ya que creas y ejecutas tu propio hilo. Lo que tienes que hacer es obtener el controlador de tu botón y establecer la visibilidad a través del hilo de la interfaz de usuario que obtienes a través del controlador.
Entonces, en lugar de
okButton.setVisibility(View.VISIBLE)
deberías hacer
okButton.getHandler().post(new Runnable() {
public void run() {
okButton.setVisibility(View.VISIBLE);
}
});
Encontré que esta es una solución mucho más simple. Visibilidad en 7 segundos de retraso
continuebutton.setVisibility(View.INVISIBLE);
continuebutton.postDelayed(new Runnable() {
public void run() {
continuebutton.setVisibility(View.VISIBLE);
}
}, 7000);