Android ListView返回活动后不显示输入消息

Android ListView返回活动后不显示输入消息,android,listview,message,openfire,smack,Android,Listview,Message,Openfire,Smack,我试图创建一个聊天客户端,即使我有一个问题。当我第一次打开应用程序并打开聊天(ListView)时,它工作得非常好 04-17 07:19:51.681 10020-10081/com.example.example E/SENDER ANSWER:﹕ yes 04-17 07:19:55.494 10020-10081/com.example.example E/SENDER ANSWER:﹕ hi 但是当我用back按钮离开聊天室,我想回到窗口时,它不会显示收到的信息,而是显示我的信

我试图创建一个聊天客户端,即使我有一个问题。当我第一次打开应用程序并打开聊天(ListView)时,它工作得非常好

04-17 07:19:51.681  10020-10081/com.example.example E/SENDER ANSWER:﹕ yes
04-17 07:19:55.494  10020-10081/com.example.example E/SENDER ANSWER:﹕ hi

但是当我用back按钮离开聊天室,我想回到窗口时,它不会显示收到的信息,而是显示我的信息

在我发送“秒”后,其他用户发送:

04-17 07:21:17.246  10020-10081/com.example.example E/SENDER ANSWER:﹕ second time and doesnt work
并且它没有显示在listview上。 这是我的密码:

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    chatmanager.addChatListener(new ChatManagerListener() {
                @Override
                public void chatCreated(Chat chat, boolean createdLocally) {
                if (!createdLocally) {
                    chat.addMessageListener(new ChatMessageListener() {
                        @Override
                        public void processMessage(Chat chat, Message message) {
                            Log.e("SENDER ANSWER:", message.getBody());

                            sender_messages = message.getBody();

                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    populateConversation(sender_messages, true);

                                    populateConversationView();
                                }
                            });
                        }

                    });
                }

                }
            });
}
也许它不必与聊天侦听器在一起,因为它正在接收消息,但只是不显示。我将非常感谢任何帮助

public void populateConversationView(){
 final ArrayAdapter<Message_Provider> adapter = new MyListAdapter();


messagesList.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
    messagesList.setAdapter(adapter);

    adapter.registerDataSetObserver(new DataSetObserver() {
        @Override
        public void onChanged() {
            super.onChanged();
            messagesList.setSelection(adapter.getCount());
        }
    });

 private class MyListAdapter extends ArrayAdapter<Message_Provider> { // Done
        public MyListAdapter(){
            super(getApplicationContext(), R.layout.chat_conversation, messages);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View itemView = convertView;
            if(itemView == null){
                itemView = getLayoutInflater().inflate(R.layout.source_message, parent, false);
            }


            Message_Provider currentContact = messages.get(position);

            TextView myMessage = (TextView) itemView.findViewById(R.id.senderMessege);

            myMessage.setText(currentContact.getMessage());

            LinearLayout.LayoutParams parameter = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            if (currentContact.getSender()){
                parameter.gravity = Gravity.LEFT;
                myMessage.setBackgroundResource(R.drawable.sender_messages);

            }else {
                parameter.gravity = Gravity.RIGHT;
                myMessage.setBackgroundResource(R.drawable.my_message);

            }
            myMessage.setLayoutParams(parameter);


            return itemView;
        }
public void populateConversationView(){
最终阵列适配器=新的MyListAdapter();
messagesList.setTranscriptMode(AbsListView.TRANSCRIPT\u MODE\u ALWAYS\u SCROLL);
messagesList.setAdapter(适配器);
registerDataSetObserver(新的DataSetObserver(){
@凌驾
更改后的公共无效(){
super.onChanged();
messagesList.setSelection(adapter.getCount());
}
});
私有类MyListAdapter扩展了ArrayAdapter{//Done
公共MyListAdapter(){
super(getApplicationContext(),R.layout.chat_会话,消息);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图项视图=转换视图;
如果(itemView==null){
itemView=GetLayoutFlater().充气(R.layout.source_消息,父项,false);
}
Message\u Provider currentContact=messages.get(位置);
TextView myMessage=(TextView)itemView.findViewById(R.id.senderMessage);
myMessage.setText(currentContact.getMessage());
LinearLayout.LayoutParams参数=新的LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_内容,ViewGroup.LayoutParams.WRAP_内容);
if(currentContact.getSender()){
parameter.gravity=gravity.LEFT;
myMessage.setBackgroundResource(R.drawable.sender\u messages);
}否则{
parameter.gravity=gravity.RIGHT;
myMessage.setBackgroundResource(R.drawable.my_message);
}
myMessage.setLayoutParams(参数);
返回项目视图;
}

我一整天都在测试,就像当我回去打开一个新的活动时,聊天侦听器会增加预览,而不是新的,我想这是因为runOnUiThread。

修复了这个问题,天哪!调试XD几个小时后,我需要关闭侦听器中的聊天

runOnUiThread(new Runnable() {
        @Override
        public void run() {
        populateConversation(sender_messages, true);
        populateConversationView();
        chat.close(); // HERE

        }  
    });

我发布此消息是因为有像我这样的初学者,可能也会遇到此问题。

让我知道你适配器的代码。发布你的适配器代码。人们可以更好地帮助你,我只是检查了一下,当我返回聊天室时,收到的消息没有进入populateListView功能,我想这是因为Rununuithread和当我访问时返回它正在上一个UI上运行