Отображение символов в текстовом виде с задержкой - Android - PullRequest
2 голосов
/ 08 июля 2011

Я хочу отображать буквы, используя 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 ]

2 голосов
/ 08 июля 2011

Вы не можете изменять элементы управления пользовательского интерфейса из других потоков.Обновите ваш код следующим образом:

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) {}
    }
}
2 голосов
/ 08 июля 2011

Вы не можете обновить текстовое представление в потоке, поскольку обновление пользовательского интерфейса не является безопасным для потока.

используйте это

    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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...