Android не добавляет () текст в текстовое представление должным образом - PullRequest
2 голосов
/ 28 мая 2011

У меня есть текстовое представление, в которое я добавляю текст двумя способами: Первый способ: нажатием кнопки и получением того, что находится в EditText.

 sendbutton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
              txview.append("Text: "+txedit.getText()+"\n");
              txedit.setText("");

 }
          });

И это прекрасно работает, когда я нажимаю кнопку обновления текстового представленияпредставление с новым текстом.

НО

Вторым способом я слушаю xmpp listener (библиотека asmack) и при получении сообщения добавляю его в textView.

 chat = xmpp.getChatManager().createChat(contactid[1], new MessageListener() {
                public void processMessage(Chat chat, Message message) {    
                     try {
                        chat.sendMessage(message.getBody());
                    } catch (XMPPException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }                txview.append("Text"+message.getFrom()+"\n"+message.getBody()+"\n");               }                                                       }
            );;

Проблема в том, что я получаю сообщение, я знаю его наверняка (потому что я отправляю его пользователю с помощью chat.sendMessage (message.getBody ());), НО textview показывает мои сообщения только после того, как я изменил вид или перенес приложение в фоновый режим (нажав кнопку «Домой»), а затем вернул его обратно.

ЧтоЯ пытался вызывать invalidate () для каждого представления, вообще не работает.

Это какое-то решение или другой способ сделать то, что я делаю?

Ответы [ 2 ]

8 голосов
/ 28 мая 2011

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

Handler h = new Handler(context.getMainLooper());

h.post(new Runnable() {
    @Override
    public void run() {
         txview.append("Text"+message.getFrom()+"\n"+message.getBody()+"\n"); 
    }
});
1 голос
/ 28 мая 2011

Вы уверены, что во втором примере метод processMessage (Chat, Message) вызывается в потоке GUI?Если нет, то есть ваша проблема.Никогда не трогайте GUI из не-GUI потока.Почти нет GUI это нравится.

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