У меня есть фрагмент с панелью поиска (редактировать текст) и представлением переработчика внизу. Для отображения моего вида переработчика я использую адаптер. Я пытаюсь отобразить всех друзей пользователя. Проблема в том, что элементы представления рециркулятора не отображаются, пока я не нажму в строке поиска (ничего не печатая).
Кроме того, при загрузке изображений из моей базы данных в представления изображений они смешиваются.
Моя база данных выглядит следующим образом:
{
"Friends": {
"id3":{
"id1": "name1",
"id2": "name2",
...
},
"id4":{
"id1": "name1",
"id3": "name3",
...
}, ...
},
"Users": {
"id1":{
info about user1
},
"id2":{
info about user2
},
"id3":{
info about user3
},
"id4":{
info about user4
}, ...
}
}
Я немного отладил и обнаружил, что мой onCreateViewHolder никогда не вызывается при создании фрагмента (не уверен, что это актуально).
Я также попытался использовать другой запрос, который просто отображает всех пользователей в базе данных (так что просто перебирая дочерние узлы узла «Пользователи»). Это сработало, поэтому я думаю, что проблема с моими запросами. Однако я не могу понять, где я иду не так.
Как я связываю свой вид переработчика с моим адаптером:
recyclerView = view.findViewById(R.id.frag_invite_recycler);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
searchBar = view.findViewById(R.id.frag_invite_search_bar);
mUsers = new ArrayList<>();
mAdapter = new EventUserAdapter(getContext(),mUsers);
recyclerView.setAdapter(mAdapter);
Запрос моих друзей:
Query friends = FirebaseDatabase.getInstance().getReference("Friends").child(firebaseUser.getUid()).orderByValue();
friends.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
mUsers.clear();
for (DataSnapshot snp : dataSnapshot.getChildren()) {
Query users = FirebaseDatabase.getInstance().getReference("Users").child(snp.getKey());
users.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
User user = dataSnapshot.getValue(User.class);
assert user != null;
mUsers.add(user);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
mAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
Мой адаптер:
@NonNull
@Override
public EventViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(mContext).inflate(R.layout.user_event, viewGroup, false);
return new EventViewHolder(view, mListener);
}
@Override
public void onBindViewHolder(@NonNull EventViewHolder eventViewHolder, int i) {
firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
final User user = mUsers.get(i);
eventViewHolder.username.setText(user.getUsername());
if (user.getImgURL() != null) Glide.with(eventViewHolder.icon.getContext()).load(user.getImgURL()).into(eventViewHolder.icon);
}
@Override
public int getItemCount() {
return mUsers.size();
}
My ViewHolder:
public class EventViewHolder extends RecyclerView.ViewHolder {
public TextView username;
public ImageView check;
public CircleImageView icon;
public EventViewHolder(@NonNull View itemView, final onItemClickListener listner) {
super(itemView);
username = itemView.findViewById(R.id.user_event_name);
icon = itemView.findViewById(R.id.user_event_image);
check = itemView.findViewById(R.id.user_event_check);
}
}