JMB:
Tengo un chat en mi aplicación y me gustaría hacerlo de modo que aparezca la fecha sólo una vez por día por encima del primer mensaje enviado independientemente de qué usuario envió por primera vez. Estoy almacenando la fecha en Firebase y recuperar, estuvo bien, pero necesito para la fecha sólo volver una vez si es un nuevo día y no después de cada mensaje enviado.
Ahora mismo estoy recibiendo así después de cada mensaje enviado que no es lo que me gustaría. Debe volver una sola vez, por encima primer mensaje enviado si se trata de un nuevo día. De lo contrario el tiempo justo.
Si tengo que añadir mi clase POJO para chatear que puedo hacer eso o mi archivo XML.
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;
}
}
}
Noviembre Özdemir:
si no me equivoco. Usted puede tratar de esta manera:
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);
}
}