Я читаю данные о пользователях (имя, возраст) из базы данных Firebase и показываю их в виде переработчика.Когда пользователь долго щелкает элемент, этот элемент удаляется из firebase успешно, но когда я пытаюсь удалить этот элемент из списка пользователей, например, List, в методе onChildRemoved дочернего слушателя, пользователь не удаляется.Код:
mChildListener=new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
User user=dataSnapshot.getValue(User.class);
user.setUid(dataSnapshot.getKey());
mDataList.add(user);
mUserAdapter.notifyDataSetChanged();
//passing the user returned to adapter but didn't work
mUserAdapter.updateDataSet(user);
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
User user=dataSnapshot.getValue(User.class);
user.setUid(dataSnapshot.getKey());
mDataList.remove(user);
mUserAdapter.notifyDataSetChanged();
}
};
Это класс модели пользователя:
public class User {
private String uid;
private String name;
private int age;
public User() {}
public User(String uid, String name, int age) {
this.uid = uid;
this.name = name;
this.age = age;
}
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getUid() {return uid;}
public void setUid(String uid) {this.uid = uid;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public int getAge() {return age;}
public void setAge(int age) {this.age = age;}
}
Код вида переработчика:
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
User user=mDataList.get(position);
holder.textView.setText(user.getName()+ " | "+user.getAge());
holder.textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String uid=user.getUid();
Intent intent=new Intent(mContext,DetailsActivity.class);
intent.putExtra(USER_KEY,uid);
mContext.startActivity(intent);
}
});
holder.textView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
//this line returns true
boolean remove = mDataList.contains(user);
//if I try to remove the user here, its removed
//this line works as I want
// mDataList.remove(user);
Log.d(MainActivity.TAG, "updateDataSet: Contains: "+remove);
Task<Void> removeUser = NetworkUtils.removeUser(user.getUid());
removeUser.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Toast.makeText(mContext, "User removed", Toast.LENGTH_SHORT).show();
//mDataList.remove(user);
//notifyDataSetChanged();
}
});
return true;
}
});
}
Я также пытался передатьПользователь вернулся в onChildRemoved к адаптеру, но это также не работает.
public void updateDataSet(User user){
//this also returns false even the data of this user id displayed
boolean contains=mDataList.contains(user);
//this also does not works
mDataList.remove(user);
this.notifyDataSetChanged();
}
Мои вопросы:
1) Как удалить элемент, удаленный при длительном щелчке элемента иза также список просмотра переработчика?
2) У меня List<User> mDataList
в MainActivity.java
и один в UserAdapter.java
.Я передаю mDataList
в MainActivity
на UserAdapter
.Эти два одинаковы в памяти или разные?Если отличается, то как изменение List<user> mDataList
в MainActivity
(добавление новых элементов в onChildAdded
) изменяет List<User> mDataList
в UserAdapter
?Большое спасибо.Я старался изо всех сил, чтобы очистить мои вопросы, насколько это возможно.