在何处/如何确定是否发送或接收聊天信息(android)
安卓聊天应用。我正在客户端上使用一个临时的ArrayList,以确保显示聊天气泡按预期工作。在何处以及如何确定消息是否已发送或接收 ChatConversationFragment:在何处/如何确定是否发送或接收聊天信息(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
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