【问题标题】:Where / how to determine whether chat message was sent or received (android)在哪里/如何确定聊天消息是发送还是接收(android)
【发布时间】:2019-01-07 23:53:27
【问题描述】:

Android 聊天应用。我在客户端上使用了一个临时 ArrayList 以确保显示聊天气泡按预期工作。我在哪里以及如何确定消息是发送还是接收?

ChatConversationFragment:

messageArrayList.add(new ChatConversationMessage("Hello"));
messageArrayList.add(new ChatConversationMessage("Yeah"));
messageArrayList.add(new ChatConversationMessage("Yeah", R.drawable.redhead_1)); 
//this last one is received because it has two inputs

ChatConversationMesssage:

/**
 * The reason we have TWO of these methods with the same name is because sent
 * messages don't have an image. We need to have a separate method for that.
 **/
public ChatConversationMessage(String sentTextMessage) {
    mSentTextMessage = sentTextMessage;
}

public ChatConversationMessage(String receivedTextMessage, int imageResourceId) {
    mReceivedTextMessage = receivedTextMessage;
    mImageResourceId = imageResourceId;
}

ConversationMessageAdapter:

@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View listItemView = convertView;
    Holder holder;
    ChatConversationMessage currentMessage = getItem(position);

    if(listItemView == null) {
        holder = new Holder();

        if(currentMessage){
        listItemView = LayoutInflater.from(getContext()).inflate(
            R.layout.chat_conversation_txt_sent, parent, false);
        }
    }        

    TextView sentText = listItemView.findViewById(R.id.textview_chat_message_sent);
    sentText.setText(currentMessage.getSentTextMessage());

    TextView receivedText = listItemView.findViewById(R.id.textview_chat_message_received);
    receivedText.setText(currentMessage.getReceivedTextMessage());

    return listItemView;
}

所以我试图将它放在最后一个类(适配器)的 if 语句中。但我不知道要制作什么方法以及将它放在哪里,所以我可以返回一个布尔值或其他东西,让它根据消息是发送还是接收显示不同的聊天气泡。

【问题讨论】:

  • 将作者字段添加到 ChatConversationMessage,检查适配器 if (author == me) show X else show Y

标签: android class if-statement methods chat


【解决方案1】:

我为感兴趣的人找到了解决方案:

getView 方法是唯一需要更改的方法。 我需要在 if 语句中使用“setText”方法,以便为每个实例扩展正确的布局。

@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View listItemView = null;
    ChatConversationMessage currentMessage = getItem(position);

    if (currentMessage.getSentTextMessage() != null) {
            listItemView = LayoutInflater.from(getContext()).inflate(
                R.layout.chat_conversation_txt_sent, parent, false);
                TextView sentText = listItemView.findViewById(R.id.textview_chat_message_sent);
                sentText.setText(currentMessage.getSentTextMessage());
        }

    if (currentMessage.getReceivedTextMessage() !=null) {
        listItemView = LayoutInflater.from(getContext()).inflate(
                R.layout.chat_conversation_txt_received, parent, false);
                TextView receivedText = listItemView.findViewById(R.id.textview_chat_message_received);
                receivedText.setText(currentMessage.getReceivedTextMessage());
    }

    return listItemView;
}

我不知道这是否是最好的方法,但它很有效,而且我认为它简洁易读。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 2021-04-14
    相关资源
    最近更新 更多