在textview中显示时间延迟的字符 - android

时间:2011-07-08 10:03:40

标签: java android multithreading time

我想使用textview显示字母。并且字母应在一段时间间隔后显示在textview中

我使用以下代码......

String a="Apple";
String b="";
.......
.......


public void run() {

    for (int i = 0; i < 5; i++) {
        b=b+""+a.charAt(i);
        mTextView.setText(b); //Problem here
        Log.d("Letters",""+b);
            try {
                  sleep(2000); 
           } catch (InterruptedException e) {}
    }

Log cat结果: android.view.ViewRoot $ CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能触及其视图。
任何解决方案?

2 个答案:

答案 0 :(得分:2)

您无法更新线程中的textview,因为UI更新不是线程安全的。

使用此

    public void run() {

        for (int i = 0; i < 5; i++) {
            b=b+""+a.charAt(i);

            Log.d("Letters",""+b);
                try {
                      sleep(2000); 
                      handler.post(updateMessgae)
               } catch (InterruptedException e) {}
        }

private final Runnable updateMessgae= new Runnable() 
    {
        public void run() 
        {
            try 
            {
            Log.d("Letters",""+b);  
            } 
            catch (Exception e) 
            {
                e.printStackTrace();
            }
        }
    };
    private final Handler handler = new Handler();

答案 1 :(得分:2)

您无法从其他线程更改UI控件。以下一种方式更新您的代码:

public void run() {

    for (int i = 0; i < 5; i++) {
        b=b+""+a.charAt(i);

        //one of the ways to update UI controls from non-UI thread.
        runOnUiThread(new Runnable()
        {               
            @Override
            public void run()
            {
                mTextView.setText(b); //no problems here :)                 
            }
        });

        Log.d("Letters",""+b);
            try {
                  sleep(2000); 
           } catch (InterruptedException e) {}
    }
}