Search code examples
javaandroidandroid-recyclerviewadapter

Updating the viewadapter after deleting a file


i have (delete file operation ) works from inside of the adapter (Myadpter), I cannot refresh this adapter after deleting the file, the screen will stay same just the file deleted but the I need to refresh state manually by press back and re inter the same layout so I will find the layout is missing the file that I deleted, but need to back and re inter same layout to get it refreshed.

Anybody know why the notifyDataSetChanged(); is not working?

package com.example.boc.storage;

import android.app.DownloadManager;
import android.content.Context;
import android.net.Uri;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.example.boc.R;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.storage.FirebaseStorage;

import java.util.ArrayList;
import java.util.List;

import static android.os.Environment.DIRECTORY_DOWNLOADS;
import static com.example.boc.Pdf.pdfDownloader.TAG;

public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {

    public MainActivity mainActivity;
    public ArrayList<DownModel> downModels;
    RecyclerView mRecyclerView;
    ArrayList<DownModel> downModelArrayList = new ArrayList<>();



    public MyAdapter (MainActivity mainActivity, ArrayList<DownModel> downModels) {
        this.mainActivity = mainActivity;
        this.downModels = downModels;
    }


    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

        LayoutInflater layoutInflater = LayoutInflater.from(mainActivity.getBaseContext());
        View view = layoutInflater.inflate( R.layout.storage_elements, null, false);


        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull final MyViewHolder myViewHolder, final int i) {

        myViewHolder.mName.setText( downModels.get( i ).getName() );
        myViewHolder.deletePdfBtn.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Context context = myViewHolder.mName.getContext();
                if (context != null) {
                    FirebaseFirestore db = FirebaseFirestore.getInstance();
                    FirebaseStorage firebaseStorage = FirebaseStorage.getInstance();
                    String filenamed = (String) myViewHolder.mName.getText();
                    String url = downModels.get( i ).getLink() ;
                    firebaseStorage.getReferenceFromUrl( url ).delete()
                            .addOnSuccessListener( new OnSuccessListener<Void>() {
                                @Override
                                public void onSuccess(Void aVoid) {
                                    Log.d( TAG, "DocumentSnapshot successfully written!" );
                                }
                            } );
                    db.collection( "Storage" ).document( filenamed ).delete()

                            .addOnSuccessListener( new OnSuccessListener<Void>() {
                                @Override
                                public void onSuccess(Void aVoid) {
                                    Log.d( TAG, "DocumentSnapshot successfully written!" );

                                    notifyDataSetChanged();// this method never helped //






                                }
                            } )
                            .addOnFailureListener( new OnFailureListener() {
                                @Override
                                public void onFailure(@NonNull Exception e) {
                                    Log.w( TAG, "Error writing document", e );

                                }
                            } )
                    ;

                } else {
                    return;


                }

            }
        } );




        myViewHolder.mDownload.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                downloadFile( myViewHolder.mName.getContext(), downModels.get( i ).getName(), ".pdf", DIRECTORY_DOWNLOADS, downModels.get( i ).getLink() );
            }
        } );
    }

    public void downloadFile(Context context, String fileName, String fileExtension, String destinationDirectory, String url) {

        DownloadManager downloadmanager = (DownloadManager) context.
                getSystemService(Context.DOWNLOAD_SERVICE);
        Uri uri = Uri.parse(url);
        DownloadManager.Request request = new DownloadManager.Request(uri);

        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
        request.setDestinationInExternalFilesDir(context, destinationDirectory, fileName + fileExtension);

        downloadmanager.enqueue(request);
    }






    @Override
    public int getItemCount() {
        return downModels.size();
    }


}

Solution

  • Try this!

    public void onSuccess(Void aVoid) {
          Log.d( TAG, "DocumentSnapshot successfully written!" );
          notifyItemRangeChanged(i, downModels.size());
          downModels.remove(i);
          notifyItemRemoved(i);
       }