Android中的动态文本视图?

Android中的动态文本视图?,android,Android,我是Android新手。我需要在屏幕上查看一个文本。在线程睡眠时间之后,我需要在屏幕上添加另一个文本。我必须显示文本添加,但我的代码在所有追加操作后显示。如何显示逐个添加文本 public class dynamictextview extends Activity { /** Called when the activity is first created. */ private TextView tv ; @Override public void onCr

我是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();
            }
        }
    }
公共类dynamictextview扩展活动{
/**在首次创建活动时调用*/
私家图文电视;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv=新文本视图(此);
tv.setText(“动态文本视图测试”);
设置内容视图(电视);

对于(inti=0;i首先,您不能从UI线程调用Thread.sleep()


然后,要使文本附加按预期运行,您必须首先从onCreate()方法返回,然后再修改TextView的内容。

问题在于您的
线程。sleep(500);
实际上正在使UI线程休眠。 您应该做的是将
for循环的代码放入另一个工作线程中,并使其在UI线程(runOnUIThread)上运行。

我自己还没有测试过,但理论上这种方法应该是可行的。

你可以使用handler的方法

  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);
        }
    }
private TextView mTextView;
私有处理程序=新处理程序();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView=(TextView)findViewById(R.id.TextView);
对于(int i=0;i