Android-обработчик не обновляет textview - PullRequest
2 голосов
/ 04 сентября 2011

Думаю, я поделюсь с вами каким-нибудь странным кодом, чтобы узнать, сделал ли я что-то ослепительно неправильно. Я передал обработчик в фоновый поток для обновления пользовательского интерфейса mainactivity (я знаю, что это не лучший способ, но это должно быть быстрое и грязное тестовое приложение) По сути, код добавляет сообщение в текстовое представление, например:

                    uiHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        Log.i("Text2Server", "Updating log with: " + logput);
                        logTextView.append(logput);
                    }
                });

Это происходит каждый раз при получении UDP-сообщения, журнал выводится каждый раз идеально, но текстовое представление обновляется только в первом сообщении, а иногда и вовсе не обновляется.

Я предполагаю, что это как-то связано с моим просмотром текста, но я подумал, что увижу, видел ли кто-нибудь что-нибудь подобное?

Спасибо!

P.S. Я попробовал основы, такие как использование setText () вместо append () и т. Д.

1 Ответ

0 голосов
/ 04 сентября 2011

Выводит ли он "Text2Server", "Updating log with: " + logput в LogCat?

.post(Runnable r) этот исполняемый объект помещается в очередь и будет запущен позже, когда присоединенный поток будет выполнен.

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

Попробуйте другой способ.

Создайте экземпляр обработчика:

 Handler handler = new Handler(){

        @Override
        public void handleMessage(Message msg) {        
        String logPutFromThread=msg.getData().getString("somekey");
            Log.i("Text2Server", "Updating log with: " + logPutFromThread);
            logTextView.append(logPutFromThread);
        }

    };

и из Runnable потока выполните

Runnable updateActivityUi = new Runnable(){

        @Override
        public void run() {

        //do something before you send the message
                Message msg = new Message();
                msg.peekData().putString("somekey", logput)
                handler.sendMessage(msg)


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