作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序中有一个聊天功能,并且希望将日期设置为每天仅在第一条消息上方显示一次,独立于用户首先发送的消息。我将日期存储在 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/
我刚开始使用 Gnu Plot 并创建了一些简单的绘图。但是现在我遇到了一个新问题。 输入是这样的 csv 文件: name;n0;n1;n2 Benj;1;3;2 Silv;6;1;2 Steffi
我在 MongoDB 中有 2700 条记录。每个文档的大小约为 320KB。我使用的引擎是wiredTiger,集合的总大小约为885MB。 我的 MongoDB 配置如下: systemLog:
我是一名优秀的程序员,十分优秀!