Это происходит в этом классе, я не очень старался, поэтому я открыт для идей, я пытаюсь сделать так, чтобы пользователь общался с пользователем, которого видит, и его чат заканчивается фрагментом списка чата.
public class ChatListFragment extends Fragment {
RecyclerView mRecyclerView;
List<ModelChatList> chatListList;
List<ModelUsers> userList;
DatabaseReference reference;
FirebaseUser currentUser;
AdapterChatList mAdapterChatList;
public ChatListFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_chat_list, container, false);
currentUser = FirebaseAuth.getInstance().getCurrentUser();
mRecyclerView = view.findViewById(R.id.recyclerView);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
chatListList = new ArrayList<>();
reference = FirebaseDatabase.getInstance().getReference("ChatList").child(currentUser.getUid());
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
chatListList.clear();
for (DataSnapshot ds: dataSnapshot.getChildren()){
ModelChatList chatlist = ds.getValue(ModelChatList.class);
chatListList.add(chatlist);
}
loadChats();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
// Inflate the layout for this fragment
return view;
}
private void loadChats() {
userList = new ArrayList<>();
reference = FirebaseDatabase.getInstance().getReference("Users");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
userList.clear();
for (DataSnapshot ds: dataSnapshot.getChildren()){
ModelUsers user = ds.getValue(ModelUsers.class);
for(ModelChatList chatlist: chatListList){
if(user.getUid() != null && user.getUid().equals(chatlist.getId())){
userList.add(user);
break;
}
}
//adapter
mAdapterChatList = new AdapterChatList(getContext(), userList);
mRecyclerView.setAdapter(mAdapterChatList);
for(int i=0; i<userList.size(); i++){
lastMessage(userList.get(i).getUid());
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
Код адаптера
package com.search.search.adapters;
import android.content.Context;
import android.text.format.DateFormat;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.search.search.R;
import com.search.search.models.ModelChat;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.squareup.picasso.Picasso;
import java.util.Calendar;
import java.util.List;
import java.util.Locale;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
public class AdapterChat extends RecyclerView.Adapter<AdapterChat.MyHolder>{
private static final int MSG_TYPE_LEFT = 0;
private static final int MSG_TYPE_RIGHT = 1;
Context context;
List<ModelChat> chatList;
String imageUrl;
FirebaseUser fUser;
public AdapterChat(Context context, List<ModelChat> chatList, String hisImage) {
this.context = context;
this.chatList = chatList;
this.imageUrl = hisImage;
}
@NonNull
@Override
public MyHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
if(i==MSG_TYPE_RIGHT){
View view = LayoutInflater.from(context).inflate(R.layout.row_chat_right, viewGroup, false);
return new MyHolder(view);
} else {
View view = LayoutInflater.from(context).inflate(R.layout.row_chat_left, viewGroup, false);
return new MyHolder(view);
}
}
@Override
public void onBindViewHolder(@NonNull MyHolder myHolder, int i) {
String message = chatList.get(i).getMessage();
String timeStamp = chatList.get(i).getTimestamp();
Calendar cal = Calendar.getInstance(Locale.ENGLISH);
cal.setTimeInMillis(Long.parseLong(timeStamp));
String dateTime = DateFormat.format("dd/MM/yyyy hh:mm aa", cal).toString();
myHolder.messageTv.setText(message);
myHolder.timeTv.setText(dateTime);
try {
Picasso.get().load(imageUrl).into(myHolder.profileIv);
} catch (Exception e){
}
if(i==chatList.size() - 1){
if(chatList.get(i).isSeen()) {
myHolder.isSeenTv.setText("Seen");
}else {
myHolder.isSeenTv.setText("Delivered");
}
} else {
myHolder.isSeenTv.setVisibility(View.GONE);
}
}
@Override
public int getItemCount() {
return chatList.size();
}
public int getItemViewType(int position){
fUser = FirebaseAuth.getInstance().getCurrentUser();
if(chatList.get(position).getSender().equals(fUser.getUid())){
return MSG_TYPE_RIGHT;
}
else {
return MSG_TYPE_LEFT;
}
}
class MyHolder extends RecyclerView.ViewHolder{
ImageView profileIv;
TextView messageTv, timeTv, isSeenTv;
public MyHolder(@NonNull View itemView) {
super(itemView);
profileIv = itemView.findViewById(R.id.profileImageIv);
messageTv = itemView.findViewById(R.id.messageTv);
timeTv = itemView.findViewById(R.id.dateTv);
isSeenTv = itemView.findViewById(R.id.isSeenTv);
}
}
}
Я также пытался найти ответы на этот вопрос, но ничего не могу найти
Я звоню адаптеру за пределами oncreate, потому что я хочу его что происходит, когда пользователь общается только с кем-то, но я пытался общаться с кем-то и просматривал список чатов, но ничего не получилось.