在处理一个较大的项目时,我想显示带有时间延迟的字符串数组的所有元素(以便用户可读)。
在我的示例中,我有一个 StringBuilder 文本
,它在选项卡上拆分并存储在 String[] 单词
中。
我最初的想法是使用类似的东西:
String[] words = text.toString().split("\t");
for (String word : words) {
textView.setText(word);
SystemClock.sleep(2000);
}
但是,这会阻塞 UI 线程,因此仅显示最后一个值。在阅读了更多内容后,我想出了这个解决方案(有效):
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
作为类的私有(private)变量(将其声明在与处理程序相同的范围内,强制它是最终的,但它不能是这样的)遍历数组)。
仅出于此目的而拥有类的私有(private)变量似乎非常不优雅 - 有没有我错过的更好的方法来做到这一点?
最佳答案
试试这个代码:
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);
}
}
});
}}
关于java - Android:显示带有时间延迟的数组元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30869416/