Android:显示时间延迟的数组元素?

时间:2015-06-16 13:44:06

标签: java android arrays timer android-handler

在处理一个更大的项目时,我希望显示一个String数组的所有元素,并带有时间延迟(以便用户可以读取)。

在我的示例中,我有一个StringBuilder text,它在标签上拆分并存储在String[] words中。

我最初的想法是使用类似的东西:

String[] words = text.toString().split("\t");
for (String word : words) {
    textView.setText(word);
    SystemClock.sleep(2000);
}

但是,这会阻止UI线程,因此只显示最后一个值。在阅读了abit之后,我想出了这个解决方案(可行):

final String[] words = text.toString().split("\t");
final Handler handler = new Handler();

handler.post(new Runnable(){
    @Override
    public void run() {
        textView.setText(words[i]);
        i++;
        if(i < words.length) {
            handler.postDelayed(this, TIME_DELAY_MS);
        }
    }
});

然而,这要求我将i作为类的私有变量(声明它与处理程序强制它成为最终的同一范围,它不能去通过数组)。

为此目的而拥有该类的私有变量似乎非常不优雅 - 有没有更好的方法来做到这一点我错过了?

1 个答案:

答案 0 :(得分:3)

试试这个代码:

public class test extends Activity {

private TextView textView;
private int i = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.test);
    textView = (TextView)findViewById(R.id.text);
    set();
}
private void set(){

    final String text ="A n d r o i d P r o g r a m m i n g";
    final String[] words = text.toString().split(" ");
    final Handler handler = new Handler();

    handler.post(new Runnable(){
        @Override
        public void run() {
            textView.setText(""+words[i]);
            i++;
            if(i < words.length) {
                handler.postDelayed(this, 1000);
            }
        }
    });
}}