tiempo studio programacion ocultar móviles mostrar ejemplo desarrollo curso contador boton aplicaciones android multithreading button view timer

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);