Я пытаюсь создать приложение для обмена сообщениями, и оно работает нормально, но я хочу внести некоторые изменения, вместо того, чтобы видеть пользователей в отношении их имени. Я хочу видеть пользователей в отношении последнего сообщения. В настоящее время, когда я получаю новое сообщение, оно не появляется в списке, а остается в recyclerview в той же позиции, что я хочу, это видеть пользователя сверху, которому я отправил или получил последнее сообщение. У меня есть отметка времени с каждым сообщением, которое отправлено пользователем
Структура сообщений
RecyclerAdapter
public class ChatsFragmentAdapter extends RecyclerView.Adapter<ChatsFragmentAdapter.ViewHolder2> {
private Context mContext;
private List<User> mUsers;
String theLastMessage;
String TAG = "AdTag";
public ChatsFragmentAdapter(Context mContext, List<User> mUsers) {
this.mContext = mContext;
this.mUsers = mUsers;
}
@NonNull
@Override
public ChatsFragmentAdapter.ViewHolder2 onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view= LayoutInflater.from(mContext).inflate(R.layout.user_item,parent,false);
return new ChatsFragmentAdapter.ViewHolder2(view);
}
@Override
public void onBindViewHolder(@NonNull ChatsFragmentAdapter.ViewHolder2 holder, int position) {
final User user=mUsers.get(position);
lastMessage(user.getId(), holder.last_msg);
}
@Override
public int getItemCount() {
return mUsers.size();
}
public class ViewHolder2 extends RecyclerView.ViewHolder{
public TextView username;
public ImageView profile_image;
private ImageView img_on;
private ImageView img_off;
private TextView last_msg;
public ViewHolder2(@NonNull View itemView) {
super(itemView);
username=itemView.findViewById(R.id.username);
profile_image=itemView.findViewById(R.id.profile_image);
img_on = itemView.findViewById(R.id.img_on);
img_off = itemView.findViewById(R.id.img_off);
last_msg=itemView.findViewById(R.id.last_msg);
}
}
private void lastMessage(final String userid, final TextView last_msg) {
theLastMessage = "default";
final FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
String fuserkey;
fuserkey = FirebaseAuth.getInstance().getCurrentUser().getUid();
int i = (fuserkey).compareTo(userid);
if (+i >= 1) {
ChatKey = userid + fuserkey;
} else if (+i < 1) {
ChatKey = fuserkey + userid;
} else if (+i == 0) {
ChatKey = "";
}
if (ChatKey !=null) {
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Chats").child(ChatKey);
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Chat chat = snapshot.getValue(Chat.class);
if (firebaseUser != null && chat != null) {
if (chat.getReceiver().equals(firebaseUser.getUid()) && chat.getSender().equals(userid) ||
chat.getReceiver().equals(userid) && chat.getSender().equals(firebaseUser.getUid())) {
theLastMessage = chat.getMessage();
if (!chat.isIsseen()) {
last_msg.setTypeface(Typeface.DEFAULT_BOLD);
}
}
}
}
switch (theLastMessage) {
case "default":
last_msg.setText("No Message");
break;
default:
last_msg.setText(theLastMessage);
break;
}
theLastMessage = "default";
Log.d(TAG, "Last Message : " + theLastMessage);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
}