在ListView上循环上一个聊天消息,最近发送的消息未显示

时间:2017-12-01 17:32:03

标签: java android quickblox-android

我认为我的问题应该在 adapter 方法的processmessage()处。我不知道如何解决它,有人能为我提供编码和解释的解决方案吗?期待任何回复,提前谢谢。

这是我的活动代码,如果我错了,请纠正我

@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_chat_message);

    submitButton.setOnClickListener(new View.OnClickListener(){

        public void onClick(View v){
            QBChatMessage chatMessage = new QBChatMessage();
            chatMessage.setBody(edtContent.getText().toString());
            chatMessage.setSenderId(QBChatService.getInstance().getUser().getId());
            //save chat message to history
            chatMessage.setSaveToHistory(true);

            try{
                qbChatDialog.sendMessage(chatMessage);
                //Once message send out, message will be encrypt and send to CloudMQTT server
                publish();
            }catch (SmackException.NotConnectedException e){
                e.printStackTrace();
            }

            //Put message to cache
            if (qbChatDialog.getType() == QBDialogType.PRIVATE){
                QBChatMessagesHolder.getInstance().putMessage(qbChatDialog.getDialogId(),chatMessage);
                ArrayList<QBChatMessage>messages = QBChatMessagesHolder.getInstance().getChatMessagesByDialogId(chatMessage.getDialogId());

                adapter = new ChatMessageAdapter(getBaseContext(),messages);
                lstChatMessages.setAdapter(adapter);
                adapter.notifyDataSetChanged();
            }

            edtContent.setText("");
            edtContent.setFocusable(true);

        }
    });
}

@Override
public void processMessage(String s, QBChatMessage qbChatMessage, Integer integer) {
    //Cache message
    QBChatMessagesHolder.getInstance().putMessage(qbChatMessage.getDialogId(),qbChatMessage);
    ArrayList<QBChatMessage>messages = QBChatMessagesHolder.getInstance().getChatMessagesByDialogId(qbChatMessage.getDialogId());
    adapter = new ChatMessageAdapter(getBaseContext(),messages);
    lstChatMessages.setAdapter(adapter);
    adapter.notifyDataSetChanged();
}

这是我的适配器代码,如果我错了,请纠正我

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view = convertView;
    if(convertView == null){
        LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        //If sender then chat message layout will diplay list_send_message.xml else dislplay list_recv_message.xml file
        if (qbChatMessages.get(position).getSenderId().equals(QBChatService.getInstance().getUser().getId())){
            view = inflater.inflate(R.layout.list_send_message, null);
            BubbleTextView bubbleTextView = (BubbleTextView)view.findViewById(R.id.message_content);
            bubbleTextView.setText(qbChatMessages.get(position).getBody());
        }else {
            view = inflater.inflate(R.layout.list_recv_message, null);
            BubbleTextView bubbleTextView = (BubbleTextView)view.findViewById(R.id.message_content);
            bubbleTextView.setText(qbChatMessages.get(position).getBody());
            TextView txtName = (TextView)view.findViewById(R.id.message_user);
            txtName.setText(QBUsersHolder.getInstance().getUserById(qbChatMessages.get(position).getSenderId()).getFullName());
        }
    }else{

    }
    return view;
}

0 个答案:

没有答案