Android中的动态文本视图?

时间:2010-06-25 07:04:39

标签: 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();
            }
        }
    }

3 个答案:

答案 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);
        }
    }