2011-11-01 130 views
3

我已經查看了代碼here以及代碼here,但我似乎還是無法讓我的代碼正常工作。通過第二個鏈接,我可以得到一個「計時器」,它可以在頁面上計數,但是第一次,我的UI鎖定。我試圖做的是有一個獨立的線程,不斷翻轉文本切換器中的文本,只要應用程序打開,每3秒鐘一次。我需要它的兩個值之間切換,並且已經嘗試類似如下:「開」或「關」每2秒如何連續每兩秒在兩個值之間切換文本切換器

private Runnable mUpdateTimeTask = new Runnable() { 


     public void run() { 
      while(true){                
       try { 
        mHandler.post(new Runnable(){ 
         @Override 
         public void run() { 

          try { 
          mSwitcher.setText("ON"); 
          Thread.sleep(1000); 
          mSwitcher.setText("OFF"); 
          Thread.sleep(1000); 
         } catch (InterruptedException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 

         } 
        } 
        ); 

       }catch (Exception e) { 
        //tv1.setText(e.toString()); 
       } 

      } 
       } 
      }; 

凡將翻轉。我還需要能夠從主界面更新文本切換器的內容,但還沒有達到我可以嘗試和測試的程度。除上述之外,我還嘗試使用異步任務:

 new AsyncTask<Void, Double, Void>() { 
     @Override 
     protected Void doInBackground(Void... params) { 
      while (true) { 
       mSwitcher.setText("ON"); 
       SystemClock.sleep(2000); 
       mSwitcher.setText("OFF"); 
       SystemClock.sleep(2000); 
      } 
     }  
    }.execute(); 

但是這也不起作用。

+1

爲什麼不使用帶有2個textview的viewflipper。並將flipinterval設置爲2秒。視圖翻轉器可以用於自動翻轉。 – blessenm

回答

2

嘗試使用timer

Timer timer = new Timer("desired_name"); 
timer.scheduleAtFixedRate(
    new TimerTask() { 
     public void run() { 
      //switch your text using either runOnUiThread() or sending alarm and receiving it in your gui thread 
     } 
    }, 0, 2000); 

Reference for runOnUiThread。您不能從非ui線程更新gui元素,因此嘗試從doInBackground()方法AsyncTask更新它將導致錯誤。

+1

感謝您的回答,對於遲到的接受感到抱歉! –

0

我改變了用戶界面,使用處理程序。使處理程序變量專用於Activity並調用handler.sendEmptyMessage()。

您可以使用線程或異步任務來調用Handler.sendEmptyMessage(ON/OFF)。

另一種方法是使用Handler.sendEmptyMessageDelayed()。每當用戶設置了延遲值後,該處理程序就會自行調用。實現這一點的

1
Timer t = new Timer(); 
    TimerTask scanTask = new TimerTask() { 
     public void run() { 
      mHandler.post(new Runnable() { 
         public void run() { 
          mSwitcher.setText(isOn ? "ON" : "OFF"); 
          isOn = isOn? false : true; 
         } 
       }); 
     }}; 

    t.schedule(scanTask, 0, 2000); 
3

一種替代更容易的方法是使用一個viewFlipper而非viewSwitcher。這允許你這樣做,你要單獨使用XML佈局的一切:

<ViewFlipper 
    android:id="@+id/viewFlipper1" 
    android:autoStart="true" 
    android:flipInterval="3000"> 
     <TextView 
      android:id="@+id/on_textview" 
      android:text="ON" /> 
     <TextView 
      android:id="@+id/off_textview" 
      android:text="OFF" /> 
</ViewFlipper> 

,使它看起來稍微漂亮,你還可以定義動畫在viewFlipper使用:

<ViewFlipper 
    android:id="@+id/viewFlipper1" 
    android:autoStart="true" 
    android:flipInterval="3000" 
    android:inAnimation="@android:anim/fade_in" 
    android:outAnimation="@android:anim/fade_out">  

AdapterViewFlipper Documentation