Need Firebase to return date only ONCE per day and NOT after every message

JMB :

I have a chat in my app and would like to make it so that the date shows up only once per day above the first message sent independently from which user sent it first. I am storing the date in Firebase and retrieving it just fine, but I need for the date to just come back once if it's a new day and NOT after every message sent.

Right now I am getting it like this after every message sent which isn't what I would like. Should come back just once, above first message sent if it is a new day. Otherwise just time.

If I need to add my POJO class for Chat I can do that or my xml file.

Menter image description hereessageAdapter

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

    @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;
        }
    }
}
Kasım Özdemir :

if I didn't get it wrong. You can try like this:

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

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=390637&siteId=1