Android不会正确地将文本追加到textview

art*_*ros 2 java android textview

我有一个textview,其中我以两种方式附加文本:第一种方式:通过单击按钮并获取EditText中的内容.

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

 }
          });
Run Code Online (Sandbox Code Playgroud)

这工作正常,当我点击按钮textview用新文本更新视图.

第二种方式,我听xmpp监听器(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");               }                                                       }
            );;
Run Code Online (Sandbox Code Playgroud)

问题是,我收到消息,我肯定知道它(因为我用chat.sendMessage(message.getBody());)重新发送给用户,但是 textview只在我更改视图或获取应用程序之后显示我的消息背景(单击主页按钮),然后将其恢复到前面.

我试图 在每个视图上调用invalidate(),根本不起作用.

是做任何解决方案或其他方式做我正在做的事情?

Ale*_*man 8

您可以通过以下技巧实现在GUI线程上的发布.将您的上下文(活动或服务)传递给您的听众.内部倾听者:

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

h.post(new Runnable() {
    @Override
    public void run() {
         txview.append("Text"+message.getFrom()+"\n"+message.getBody()+"\n"); 
    }
});
Run Code Online (Sandbox Code Playgroud)