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

时间:2011-05-28 04:41:43

标签: java android textview

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

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

 }
          });

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

BUT

第二种方式,我听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仅在我更改视图或将应用程序变为背景(单击主页按钮)然后将其恢复到前面后才显示我的消息。

我尝试了什么 在每个视图上调用invalidate(),根本不起作用。

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

2 个答案:

答案 0 :(得分: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"); 
    }
});

答案 1 :(得分:1)

您确定在第二个示例中是否在GUI线程上调用了processMessage(Chat,Message)方法?如果没有,那就有你的问题。切勿从非GUI线程触摸GUI。几乎没有GUI喜欢它。