gpt4 book ai didi

java - 需要 Firebase 每天仅返回一次日期,而不是在每条消息后返回日期

转载 作者:行者123 更新时间:2023-12-02 15:33:03 25 4
gpt4 key购买 nike

我的应用程序中有一个聊天功能,并且希望将日期设置为每天仅在第一条消息上方显示一次,独立于用户首先发送的消息。我将日期存储在 Firebase 中并检索它,但如果是新的一天,我需要日期只返回一次,并且在每条消息发送后

因此,如果两个用户正在聊天,则日期应该每天返回一次,但是如果是新的一天,假设我和某人在周六全天聊天,然后在周日 00:00 聊天(无论是谁)发送第一条消息,说明日期应该出现,因为这是新的一天。但同样,只有一次......而不是在每条消息之后。

现在我在每条消息发送后都会收到这样的消息,这不是我想要的。如果是新的一天,应该只返回一次,在发送的第一条消息上方。否则只是时间。

消息适配器

public class MessageAdapter extends RecyclerView.Adapter<MessageAdapter.ViewHolder> {

private static final int MSG_TYPE_LEFT = 0;
private static final int MSG_TYPE_RIGHT = 1;

private Context mContext;
private List<Chat> mChat;
private String imageurl;

public MessageAdapter(Context mContext, List<Chat> mChat, String imageurl) {
this.mChat = mChat;
this.mContext = mContext;
this.imageurl = imageurl;
}

@NonNull
@Override
public MessageAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (viewType == MSG_TYPE_RIGHT) {
View view = LayoutInflater.from(mContext).inflate(R.layout.chat_item_right, parent, false);
return new ViewHolder(view);
} else {
View view = LayoutInflater.from(mContext).inflate(R.layout.chat_item_left, parent, false);
return new ViewHolder(view);
}
}

@Override
public void onBindViewHolder(@NonNull MessageAdapter.ViewHolder holder, int position) {

Chat chat = mChat.get(position);

holder.show_message.setText(chat.getMessage());
if (imageurl.equals("default")) {
holder.profile_image.setImageResource(R.mipmap.ic_launcher);
} else {
Glide.with(mContext).load(imageurl).into(holder.profile_image);
}

if (position == mChat.size() - 1) {
if (chat.isIsseen()) {
holder.text_seen.setText("Seen");
} else {
holder.text_seen.setText("Delivered");
}
} else {
holder.text_seen.setVisibility(View.GONE);
}

holder.message_time.setText(chat.getTime());

holder.date.setText(chat.getDate());
if (position == 0) {
holder.date.setVisibility(View.VISIBLE);
} else {
Chat previous = mChat.get(position - 1);
if (previous.getDate().format("dd.MM.yyyy").equals(chat.getDate().format("dd.MM.yyyy"))) {
holder.date.setVisibility(View.GONE);
} else {
holder.date.setVisibility(View.VISIBLE);
}
}
}

@Override
public int getItemCount() {
return mChat.size();
}

static class ViewHolder extends RecyclerView.ViewHolder {

TextView show_message, text_seen, message_time, date;
ImageView profile_image;

ViewHolder(View view) {
super(view);

show_message = view.findViewById(R.id.show_message);
profile_image = view.findViewById(R.id.profile_image);
text_seen = view.findViewById(R.id.text_seen);
message_time = view.findViewById(R.id.message_time);
date = view.findViewById(R.id.date);
}
}

@Override
public int getItemViewType(int position) {
FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
if (mChat.get(position).getSender().equals(firebaseUser.getUid())) {
return MSG_TYPE_RIGHT;
} else {
return MSG_TYPE_LEFT;
}
}
}

最佳答案

如果我没有听错的话。你可以这样尝试:

holder.date.setText(chat.getDate());
if(position == 0){
holder.date.setVisibility(View.VISIBLE);
}else {
Chat previous = mChat.get(position - 1);
if(previous.getDate().equals(chat.getDate())){
holder.date.setVisibility(View.GONE);
}else{
holder.date.setVisibility(View.VISIBLE);
}
}

关于java - 需要 Firebase 每天仅返回一次日期,而不是在每条消息后返回日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60995343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com