2010-06-25 80 views
1

我是Android新手。我需要在屏幕上查看一个文本。线程休眠时间后,我需要在屏幕上添加另一个文本。我必须显示添加的文本,但在所有追加操作之后显示我的代码。如何显示逐个添加文本?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

首先,您不能从UI线程调用Thread.sleep()。

然后为了使文本追加按预期工作,您必须先在您的onCreate()方法中返回,然后再修改TextView的内容。

0

问题是您的Thread.sleep(500);实际上是让UI线程进入睡眠状态。 你应该做的是,你应该把你的for loop的代码放在另一个工作线程中,并让它在UI线程上运行(runOnUIThread)。 我自己没有测试过它,但理论上这种方法应该可行。

0

可以使用处理程序的方法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); 
     } 
    }