我在我的应用程序中进行了聊天,并且希望使其聊天,以便该日期每天仅在与第一个用户发送的消息无关的第一个消息上方显示一次。我将日期存储在Firebase中并进行了很好的检索,但是如果是新的一天,则需要将日期再次返回一次,而不是在发送所有消息之后再返回一次。

因此,如果有两个用户聊天,则日期应该每天返回一次,但是如果是新的一天,则说我和某人在星期六整天聊天,然后在星期日的00:00,无论谁发送第一条消息,日期都应该出现,因为新的一天。但是,只有一次...不是在每条消息之后。

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

MessageAdapter

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);
   }
}

10-05 21:15
查看更多