Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android FireStore RecyclerView OnSweep方法未更新RecyclerView_Java_Android_Android Recyclerview_Google Cloud Firestore - Fatal编程技术网

Java Android FireStore RecyclerView OnSweep方法未更新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()) 上述各项的组合 以上都没有 下面是代码的相

我有一个RecyclerView,并为它实现了一个滑动删除功能。然而,我不能让它正常工作。我尝试了很多方法,它们都改变了行为,但从未使其正常工作

我希望发生的是:

  • 我在视图中有3项
  • 我滑动以删除项目
  • 项目3向上移动,以填充项目2移除后留下的空间
  • 我试过:

  • adapter.notifyDataSetChanged()
  • 适配器。已移除(位置)
  • adapter.notifyItemRangeChanged(位置,adapter.getItemCount())
  • 上述各项的组合
  • 以上都没有
  • 下面是代码的相关部分,我将密切监视此线程,以便在必要时提供更多代码

    此代码在onCreate()中调用:

    同样,我将进行监视,以便在需要时提供更多代码

    Edit:添加删除该项目的代码,这在上述调用过程中发生

    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;
    }
    }