在何处/如何确定是否发送或接收聊天信息(android)

在何处/如何确定是否发送或接收聊天信息(android),android,class,if-statement,methods,chat,Android,Class,If Statement,Methods,Chat,安卓聊天应用。我正在客户端上使用一个临时的ArrayList,以确保显示聊天气泡按预期工作。在何处以及如何确定消息是否已发送或接收 ChatConversationFragment: messageArrayList.add(new ChatConversationMessage("Hello")); messageArrayList.add(new ChatConversationMessage("Yeah")); messageArrayList.add(new ChatConversati

安卓聊天应用。我正在客户端上使用一个临时的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
/**
 * 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;
}
@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;
}
聊天室会话信息:

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
/**
 * 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;
}
@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;
}
ConversationMessageAdapter:

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
/**
 * 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;
}
@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语句中。但是我不知道该使用什么方法以及将其放置在何处,这样我可以返回一个布尔值或其他值,使其根据消息的发送或接收情况显示不同的聊天气泡。

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

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
/**
 * 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;
}
@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;
}
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;
}

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

将author字段添加到ChatConversationMessage,如果(author==me)show X,则签入适配器,否则显示Y