2014-02-26 20 views
0
中不工作

以下代碼從兩個數組中獲取字符串並隨機顯示。我該如何將TimerTask應用到這個程序中,以便隨機幾秒後數組中的字符串發生變化?TimerTask在android

MainActivity

public class MainActivity extends Activity { 
    private TextSwitcher mSwitcher, mSwitcher1; 
    private int mCounter = 0; 
    String textToShow[]={"Main HeadLine","Your Message","New In Technology","New Articles","Business News","What IS New"}; 
    String textToShow1[]={"Main HeadLine","Your Message","New In Technology","New Articles","Business News","What IS New"}; 
    int messageCount=textToShow.length; 
    // to keep current Index of text 
    int currentIndex=-1; 


    public void schedule(TimerTask task,long delay,long period){ 
Timer timer = new Timer(); 
timer.schedule(new MyTimerTask(), 0, 1000); 
} 
    public class MyTimerTask extends TimerTask { 

     @Override 
     public void run() { 
      updateTextView(); 
     } 
    } 

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

    } 
       @Override 
     protected void onStart() { 
      super.onStart(); 
      updateTextView();  
     } 

     private void updateTextView() { 
      mSwitcher = (TextSwitcher) findViewById(R.id.textSwitcher); 
      mSwitcher1 = (TextSwitcher) findViewById(R.id.textSwitcher01); 
      // BEGIN_INCLUDE(setup) 
      // Set the factory used to create TextViews to switch between. 
      mSwitcher.setFactory(mFactory); 
      mSwitcher1.setFactory(mFactory); 
      Random random = new Random(); 
      Animation in = AnimationUtils.loadAnimation(this, 
        android.R.anim.fade_in); 
      Animation out = AnimationUtils.loadAnimation(this, 
        android.R.anim.fade_out); 
      mSwitcher.setInAnimation(in); 
      mSwitcher1.setInAnimation(in); 
      mSwitcher.setOutAnimation(out); 
      mSwitcher1.setOutAnimation(out); 
      int maxIndex = textToShow.length; 
      int generatedIndex = random.nextInt(maxIndex); 
      mSwitcher.setText(textToShow[generatedIndex]); 
      mSwitcher1.setText(textToShow1[generatedIndex]); 
     } 


    private ViewFactory mFactory = new ViewFactory() { 

     @Override 
     public View makeView() { 

      // Create a new TextView 
      TextView t = new TextView(MainActivity.this); 
      t.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL); 
      t.setTextAppearance(MainActivity.this, android.R.style.TextAppearance_Large); 
      return t; 
     } 
    }; 
} 

出於某種原因,串並沒有更新

回答

0

調用內部runOnUiThreadupdateTextView();方法,因爲TimerTask的run方法在非UI線程運行方式:

public class MyTimerTask extends TimerTask { 

    @Override 
    public void run() { 
     MainActivity.this.runOnUiThread(new Runnable() { 

     @Override 
     public void run() { 
     updateTextView(); 
     } 
     }); 
    } 
}