2014-12-16 41 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 
     } 
    } 
} 

wyjściowej aplikacji, praca widok widoczność obrazu po raz pierwszy, ale z timera nie działa, jeśli zegar zaczął sam błąd .... niestety został zatrzymanyImageView widoczność Błąd czasowy

+2

Może zajść potrzeba edytowania swojego mate pytania. Dodaj dziennik błędów i dodaj tag Androida :) – cgew85

+2

Podaj pełny formularz logcat błędu – gio

Odpowiedz

0

Możesz użyć android.os Zamiast tego .Handler.

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

Powodzenia. :)

+3

To jest poprawne podejście: użycie 'Handler'. Ten kod będzie czekać 3 sekundy, a następnie ukryć obraz; kod operacji ukrywa obraz natychmiast, niż czeka 3 sekundy i ukrywa go ponownie .. i znowu. – rekaszeru

0

To, co robisz, to aktualizowanie elementu gui z wątku non-gui, który kończy się na RuntimeException. Jednym ze sposobów, aby to naprawić jest użycie 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); 
      } 
     } 
    } 
} 

Powyższy przykład zmieni widoczności ImageView co 3 sekundy, choć nie jest jasne, czy ze swoim przykładzie, że był twój zamiar.