2010-08-02 13 views
12

tengo una aplicación que muestra una advertencia al inicio 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, aparece este error cuando ejecuto mi código:visibilidad conjunto androide de un botón en el temporizador

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 puntos de vista.

¿Cómo puedo contar 5 segundos, y luego hacer visible el botón? 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); 
     } 

Respuesta

53

El problema es que no estás en el hilo de interfaz de usuario cuando se llama okButton.setVisibility(View.VISIBLE);, ya que permite crear y ejecutar su 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.

Así que en lugar de

okButton.setVisibility(View.VISIBLE) 

que debe hacer

okButton.getHandler().post(new Runnable() { 
    public void run() { 
     okButton.setVisibility(View.VISIBLE); 
    } 
}); 
+0

¿Podemos encontrar algo así como, la sección de vista particular de ListView es visible desde 3 (cualquier instancia de tiempo) segundos. –

+0

Gracias hombre a ahorrar mi tiempo .. :) –

22

He encontrado que esto es una solución mucho más simple. Visibilidad en el retraso de 7 segundos

continuebutton.setVisibility(View.INVISIBLE); 
continuebutton.postDelayed(new Runnable() { 
     public void run() { 
      continuebutton.setVisibility(View.VISIBLE); 
     } 
    }, 7000); 
+0

funciona como magia .... Gracias – Richa

+0

acordado, esta es una solución mágica. Gracias por compartir. – Andy

+0

¡Guau, no hay problema con este! – Sonhja

Cuestiones relacionadas