java - Android 没有正确地将文本追加到 textview

标签 java android textview

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

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

 }
          });

这很好用,当我点击按钮时,textview 会用新文本更新 View 。

但是

第二种方式,我听 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");               }                                                       }
            );;

问题 是,我收到消息,我知道它肯定(因为我用 chat.sendMessage(message.getBody()) 将它重新发送给用户); ) ,但是 textview 仅在我更改 View 或将应用程序置于后台(单击主页按钮)然后将其返回到前台后才显示我的消息。

我尝试过的 在每个 View 上调用 invalidate() 根本不起作用。

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

最佳答案

您可以通过以下技巧实现在 GUI 线程上发布。 将您的上下文( Activity 或服务)传递给您的监听器。内部监听器:

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

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

关于java - Android 没有正确地将文本追加到 textview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6159686/

相关文章:

java - 如何修改此 Mapreduce 代码以更改实体的命名空间?

java - 无法在jsp页面中获取正确的注释名称

android - 如何使用 Android 绑定(bind)库和 Kotlin 从 View 中绑定(bind) onClick 事件?

java - 检测电子邮件并通过邮件回复

ios - TextView 中的按钮

java - Recyclerview android studio "hiding"?

java - 如何将实体保存到数据库中?

android - Android 中的 Activity 和简单表单之间的根本区别是什么?

java - 如何在TextView中标记单词

android - 如何在android中的水平Linearlayout中显示两个椭圆形结尾的Textview?