我是Android新手。我需要在屏幕上查看一个文本。在线程休眠时间之后,我需要在屏幕上添加另一个文本。我必须显示文本添加但我的代码显示在所有追加操作之后。如何逐个显示添加文字?
public class dynamictextview extends Activity {
/** Called when the activity is first created. */
private TextView tv ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = new TextView(this);
tv.setText("Dynamic Text View Test\n");
setContentView(tv);
for(int i=0;i<10;i++)
{
tv.setDrawingCacheBackgroundColor(MODE_APPEND);
tv.append("\nAttempt "+i);
try {
Thread.sleep(500);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:0)
首先,您不能从UI线程调用Thread.sleep()。
然后,为了使文本追加符合预期,您必须先从onCreate()方法返回,然后才能修改TextView的内容。
答案 1 :(得分:0)
问题是你的Thread.sleep(500);
实际上是让UI线程进入睡眠状态。
你应该做的是你应该将for loop
的代码放在另一个工作线程中,并使其在UI线程(runOnUIThread)上运行。
我自己没有测试过,但理论上这种方法应该有效。
答案 2 :(得分:0)
你可以使用handler的方法postDelayed
private TextView mTextView;
private Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView) findViewById(R.id.textview);
for(int i=0;i<10;i++)
{
handler.postDelayed(new ViewUpdater("\nAttempt "+i), 1000*i);
}
}
private class ViewUpdater implements Runnable{
private String mString;
public ViewUpdater(String string){
mString = string;
}
@Override
public void run() {
mTextView.append(mString);
}
}