以下代码从两个数组中获取String并随机显示。如何将TimerTask应用于此程序,以便数组中的字符串随机几秒后更改?
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 :(得分:0)
在updateTextView();
内调用runOnUiThread
方法,因为TimerTask运行方法在非ui线程上运行为:
public class MyTimerTask extends TimerTask {
@Override
public void run() {
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
updateTextView();
}
});
}
}