Java Android FireStore RecyclerView OnSweep方法未更新RecyclerView
我有一个RecyclerView,并为它实现了一个滑动删除功能。然而,我不能让它正常工作。我尝试了很多方法,它们都改变了行为,但从未使其正常工作 我希望发生的是:Java Android FireStore RecyclerView OnSweep方法未更新RecyclerView,java,android,android-recyclerview,google-cloud-firestore,Java,Android,Android Recyclerview,Google Cloud Firestore,我有一个RecyclerView,并为它实现了一个滑动删除功能。然而,我不能让它正常工作。我尝试了很多方法,它们都改变了行为,但从未使其正常工作 我希望发生的是: 我在视图中有3项 我滑动以删除项目 项目3向上移动,以填充项目2移除后留下的空间 我试过: adapter.notifyDataSetChanged() 适配器。已移除(位置) adapter.notifyItemRangeChanged(位置,adapter.getItemCount()) 上述各项的组合 以上都没有 下面是代码的相
adapter.deleteClient(position);
这段代码位于适配器类ClientAdapter中(您可以看到在前面的代码段顶部调用了该类)
public void deleteClient(内部位置){
getSnapshots().getSnapshot(位置).getReference().delete()
.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公开作废(作废避免){
//Log.d(标记“DocumentSnapshot已成功删除!”);
}
})
.addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
//Log.w(标签“删除文件时出错”,e);
}
});
}
下面是整个适配器类:
public class ClientAdapter extends FirestoreRecyclerAdapter<Client, ClientAdapter.ClientHolder> {
private OnItemClickListener listener;
/**
* Create a new RecyclerView adapter that listens to a Firestore Query.
*/
public ClientAdapter(@NonNull FirestoreRecyclerOptions<Client> options) {
super(options);
}
@Override
protected void onBindViewHolder(@NonNull ClientHolder holder, int position, @NonNull Client model) {
String lastNameWithComma = model.getLastName() + ", ";
holder.textViewLastName.setText(lastNameWithComma);
holder.textViewFirstName.setText(model.getFirstName());
}
@NonNull
@Override
public ClientHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.client_list_item, parent, false);
return new ClientHolder(v);
}
public void deleteClient(int position) {
getSnapshots().getSnapshot(position).getReference().delete()
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
//Log.d(TAG, "DocumentSnapshot successfully deleted!");
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
//Log.w(TAG, "Error deleting document", e);
}
});
}
class ClientHolder extends RecyclerView.ViewHolder {
TextView textViewLastName;
TextView textViewFirstName;
public ClientHolder(@NonNull View itemView) {
super(itemView);
textViewLastName = itemView.findViewById(R.id.rv_tv_last_name);
textViewFirstName = itemView.findViewById(R.id.rv_tv_first_name);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION && listener != null) {
listener.onItemClick(getSnapshots().getSnapshot(position), position);
}
}
});
}
}
public interface OnItemClickListener {
void onItemClick(DocumentSnapshot documentSnapshot, int position);
}
public void setOnItemClickListener(OnItemClickListener listener) {
this.listener = listener;
}
}
公共类ClientAdapter扩展了FirestoreRecyclerAdapter{
私人监听;
/**
*创建一个新的RecyclerView适配器,用于侦听Firestore查询。
*/
公共客户端适配器(@NonNull FirestoreRecyclerOptions选项){
超级(期权);
}
@凌驾
受保护的无效onBindViewHolder(@NonNull ClientHolder holder,int位置,@NonNull客户端模型){
字符串lastNameWithComma=model.getLastName()+“,”;
holder.textViewLastName.setText(LastName加逗号);
holder.textViewFirstName.setText(model.getFirstName());
}
@非空
@凌驾
public ClientHolder onCreateViewHolder(@NonNull ViewGroup父级,int viewType){
视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.client\u list\u项,parent,false);
返回新的客户机(v);
}
公共客户机(内部位置){
getSnapshots().getSnapshot(位置).getReference().delete()
.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公开作废(作废避免){
//Log.d(标记“DocumentSnapshot已成功删除!”);
}
})
.addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
//Log.w(标签“删除文件时出错”,e);
}
});
}
类ClientHolder扩展了RecyclerView.ViewHolder{
TextView textViewLastName;
TextView textViewFirstName;
公共ClientHolder(@NonNull View itemView){
超级(项目视图);
textViewLastName=itemView.findViewById(R.id.rv\u tv\u姓氏);
textViewFirstName=itemView.findViewById(R.id.rv\u tv\u first\u name);
itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
int position=getAdapterPosition();
if(position!=RecyclerView.NO_position&&listener!=null){
onItemClick(getSnapshots().getSnapshot(position),position);
}
}
});
}
}
公共接口侦听器{
void onItemClick(DocumentSnapshot DocumentSnapshot,int位置);
}
公共void setOnItemClickListener(OnItemClickListener侦听器){
this.listener=listener;
}
}
您只想从适配器中删除该项,还是同时从数据库中删除该项?@AlexMamo两者都要删除。我希望它从Firestore中删除,我希望它从RecyclerView中消失,我希望RecyclerView能够实时动画和更新列表。我似乎只知道如何做其中的一部分,但不是同时做所有的!请添加从数据库中删除该项的代码。@AlexMamo已添加!请看上面。
public void deleteClient(int position) {
getSnapshots().getSnapshot(position).getReference().delete()
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
//Log.d(TAG, "DocumentSnapshot successfully deleted!");
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
//Log.w(TAG, "Error deleting document", e);
}
});
}
public class ClientAdapter extends FirestoreRecyclerAdapter<Client, ClientAdapter.ClientHolder> {
private OnItemClickListener listener;
/**
* Create a new RecyclerView adapter that listens to a Firestore Query.
*/
public ClientAdapter(@NonNull FirestoreRecyclerOptions<Client> options) {
super(options);
}
@Override
protected void onBindViewHolder(@NonNull ClientHolder holder, int position, @NonNull Client model) {
String lastNameWithComma = model.getLastName() + ", ";
holder.textViewLastName.setText(lastNameWithComma);
holder.textViewFirstName.setText(model.getFirstName());
}
@NonNull
@Override
public ClientHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.client_list_item, parent, false);
return new ClientHolder(v);
}
public void deleteClient(int position) {
getSnapshots().getSnapshot(position).getReference().delete()
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
//Log.d(TAG, "DocumentSnapshot successfully deleted!");
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
//Log.w(TAG, "Error deleting document", e);
}
});
}
class ClientHolder extends RecyclerView.ViewHolder {
TextView textViewLastName;
TextView textViewFirstName;
public ClientHolder(@NonNull View itemView) {
super(itemView);
textViewLastName = itemView.findViewById(R.id.rv_tv_last_name);
textViewFirstName = itemView.findViewById(R.id.rv_tv_first_name);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION && listener != null) {
listener.onItemClick(getSnapshots().getSnapshot(position), position);
}
}
});
}
}
public interface OnItemClickListener {
void onItemClick(DocumentSnapshot documentSnapshot, int position);
}
public void setOnItemClickListener(OnItemClickListener listener) {
this.listener = listener;
}
}