Мигающий курсор в TextView через поток - PullRequest
2 голосов
/ 07 марта 2012

Я хочу создать мигающий курсор в TextView .. Пока что я получил это:

    myTv = (TextView)findViewById(R.id.myTv);


    //blinking Cursors Thread
    class CursorThread extends Thread 
    {
        public void run()
        {
            while (true) 
            {
                myTv.setText("|");

                try 
                {
                    sleep(1000);
                } 
                catch (InterruptedException e) 
                {}

                myTv.setText(" ");

                try 
                {
                    sleep(1000);
                } 
                catch (InterruptedException e) 
                {}
            }  
        }
    }
    CursorThread cThread = new CursorThread();
    cThread.start();

Если я запустил это приложение, я получаю сбой.Что ми делаешь неправильно?Я многого не знаю о потоках ... О, и этот поток, конечно, является внутренним классом в моей основной деятельности.

Кто-нибудь может помочь?

Ответы [ 3 ]

5 голосов
/ 07 марта 2012

Вы должны получить доступ к потоку пользовательского интерфейса из другого потока с помощью метода runOnUI, как показано здесь

runOnUiThread(new Runnable() {
    public void run() {
        keresetTv.setText(" ");
    }
});

или с помощью handler.post(new Runnable...);

3 голосов
/ 07 марта 2012

Альтернатива: подкласс TextView и вызов onDraw postInvalidateDelayed(), осуществляющий недействительность самого себя через несколько миллисекунд. Отслеживайте время между вызовами в onDraw и соответствующим образом мигайте курсором.

2 голосов
/ 07 марта 2012

Вы пытаетесь изменить представление из другого потока (это не основной поток UI).Вы можете использовать Handler, чтобы изменить TextView с CursorThread.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...