2014-12-16 33 views
6
package name.cpr; 

import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import java.util.Timer; 
import java.util.TimerTask; 

public class ExampleActivity extends ActionBarActivity 
{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_example); 
     Timer timer = new Timer(); 
     timer.schedule(new CheckConnection(), 0, 3000); 
     ImageView iv = (ImageView) findViewById(R.id.imageView); 
     iv.setVisibility(View.VISIBLE); 
    } 
    class CheckConnection extends TimerTask{ 
     public void run(){ 
      ImageView iv = (ImageView) findViewById(R.id.imageView); 
      iv.setVisibility(View.INVISIBLE); //<- Unfortunatly Error Here 
     } 
    } 
} 

app di partenza, la prima volta il lavoro visualizzazione dell'immagine visibilità ma con il timer non funziona, se il timer ha iniziato stesso errore Purtroppo .... si è fermatoImageView visibilità errore con il temporizzatore

+2

È possibile modificare la domanda, aggiungere il registro errori e aggiungere il tag Android :) – cgew85

+2

Fornire il modulo di errore completo logcat – gio

risposta

0

Si consiglia di utilizzare android.os .Handler invece.

public class ExampleActivity extends ActionBarActivity 
{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_example); 
     ImageView iv = (ImageView) findViewById(R.id.imageView); 
     iv.setVisibility(View.VISIBLE); 
     // 
     new Handler().postDelayed(new Runnable() { 
       @Override 
       public void run() { 
         iv.setVisibility(View.INVISIBLE); 
       } 
     }, 3000); 
    } 
} 

Buona fortuna. :)

+3

Questo è l'approccio corretto: utilizzare un 'Handler'. Questo codice attenderà 3 secondi, quindi nasconde l'immagine; il codice operativo nasconde l'immagine all'istante, poi aspetta 3 secondi e lo nasconde di nuovo ... e ancora. – rekaszeru

0

Quello che stai facendo è l'aggiornamento di un elemento GUI da un thread non gui, che finisce in un RuntimeException. Un modo per risolvere il problema è quello di utilizzare un Handler:

public class ExampleActivity extends Activity 
{ 
    private ImageView iv; 
    private ImgHandler handler; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_example); 

     this.iv = (ImageView) findViewById(R.id.imageView); 
     this.iv.setVisibility(View.VISIBLE); 
     this.handler = new ImgHandler(this.iv); 

     final Timer timer = new Timer(); 
     timer.schedule(new CheckConnection(), 0, 3000); 
    } 

    /** 
    * The timer task to run every 3 seconds 
    */ 
    private final class CheckConnection extends TimerTask 
    { 
     public void run() 
     { 
      handler.sendEmptyMessage(0); 
     } 
    } 

    /** 
    * Custom <b>static</b> handler to bridge between the timer task's thread and the gui 
    */ 
    private static final class ImgHandler extends Handler 
    { 
     // use a weak reference to the ImageView instance you'd like to manipulate: 
     private final WeakReference<ImageView> imageReference; 

     public ImgHandler(final ImageView img) 
     { 
      this.imageReference = new WeakReference<ImageView>(img); 
     } 

     @Override 
     public void handleMessage(Message msg) 
     { 
      if (imageReference == null) 
       return; // no image to show/hide 
      final ImageView img = imageReference.get(); 
      // since this is the single message we are handling, no switch is used: 
      if (img != null) 
      { 
       img.setVisibility(img.getVisibility() == View.VISIBLE ? View.INVISIBLE : View.VISIBLE); 
      } 
     } 
    } 
} 

L'esempio sopra cambierà la visibilità del tuo ImageView ogni 3 secondi, anche se non è chiaro dal vostro esempio se quello era il vostro intento.