Как я могу скрыть кнопку «Удалить» из recyclerview, если файл не существует? - PullRequest
0 голосов
/ 06 мая 2020

Вот мой адаптер recyclerView, который показывает список из базы данных, кнопка просмотра предназначена для загрузки, а кнопка удаления удаляет файл из хранилища устройства, он работает отлично. Но как мне сделать видимость кнопки удаления невидимой / пропавшей, если файл не существует в хранилище устройства.


    MainActivity mainActivity;
    ArrayList<DownModel> downModels;

    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.elements, viewGroup, false);

        return new MyViewHolder(view);
    }

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

        myViewHolder.mName.setText(downModels.get(i).getName());
        myViewHolder.mDownload.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(myViewHolder.mDownload.getContext(), PdfView.class);
                intent.putExtra("pdf_url", downModels.get(i).getLink());
                intent.putExtra("pdf_name",downModels.get(i).getName());
                myViewHolder.mDownload.getContext().startActivity(intent);

            }
        });
        myViewHolder.mDelete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Context context = myViewHolder.itemView.getContext();
                String pdfName = downModels.get(i).getName()+".pdf";
                File file = new File(context.getFilesDir(), pdfName);
                try {
                    if (file.exists())
                        file.delete();
                    Log.e("file","file"+file.getAbsolutePath());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

    }


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

}

RecyclerView

public class MainActivity extends AppCompatActivity {
FirebaseFirestore db;
RecyclerView mRecyclerView;
ArrayList<DownModel> downModelArrayList = new ArrayList<>();
MyAdapter myAdapter;



@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mRecyclerView= findViewById(R.id.recycle);
    mRecyclerView.setHasFixedSize(true);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
    db=FirebaseFirestore.getInstance();
    dataFromFirebase();

}

@Override
protected void onResume() {
    super.onResume();
    myAdapter.notifyDataSetChanged();
}

private void dataFromFirebase() {
    if(downModelArrayList.size()>0)
        downModelArrayList.clear();

    db.collection("chapter1").orderBy("value")
            .get()
            .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                @Override
                public void onComplete(@NonNull Task<QuerySnapshot> task) {
                    for(DocumentSnapshot documentSnapshot: Objects.requireNonNull(task.getResult())) {

                        DownModel downModel= new DownModel(documentSnapshot.getString("name"),
                                documentSnapshot.getString("link"));
                        downModelArrayList.add(downModel);

                    }

                    myAdapter= new MyAdapter(MainActivity.this,downModelArrayList);
                    mRecyclerView.setAdapter(myAdapter);

                }
            })

            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Toast.makeText(MainActivity.this, "Error ;-.-;", Toast.LENGTH_SHORT).show();
                }
            })
    ;


}

} Макет

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="5dp"
>

    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"

            >

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:layout_marginBottom="5dp"
                android:layout_marginTop="5dp">

                <TextView
                    android:id="@+id/name"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="start"
                    android:text="Name"
                    android:textSize="20sp" />
            </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:layout_marginBottom="5dp"
            android:orientation="horizontal"
            android:weightSum="2"
            >

            <Button
                android:id="@+id/down"
                android:layout_width="0dp"
                android:layout_height="30dp"
                android:layout_marginEnd="10dp"
                android:layout_weight="1"
                android:background="#A00303"
                android:elevation="7dp"
                android:text="View"
                android:textColor="#FFFFFF"
                tools:visibility="visible" />

            <Button
                android:id="@+id/delete"
                android:layout_width="0dp"
                android:layout_height="30dp"
                android:layout_marginStart="10dp"
                android:layout_weight="1"
                android:background="#A00303"
                android:elevation="7dp"
                android:text="Delete"
                android:textColor="#FFFFFF"
                tools:visibility="gone" />

        </LinearLayout>

        </LinearLayout>

    </androidx.cardview.widget.CardView>

image

1 Ответ

1 голос
/ 06 мая 2020

Проверить, существует ли файл в onBindViewHolder():

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

//check if file exists

Context context = myViewHolder.itemView.getContext();
String pdfName = downModels.get(i).getName()+".pdf";
File file = new File(context.getFilesDir(), pdfName);

if(file.exits()){

//file exists, show delete button
myViewHolder.mDelete.setVisibility(View.VISIBLE);

}else{
//file doesn't exist, hide delete button
myViewHolder.mDelete.setVisibility(View.GONE);
}

.........
.........
.........

}

ОБНОВЛЕНИЕ:

После завершения загрузки вызовите этот метод на адаптер:

adapter.notifyDataSetChanged();

ОБНОВЛЕНИЕ 2:

@Override
protected void onResume() {
    super.onResume();

    if(myAdapter != null){
    myAdapter.notifyDataSetChanged();
    }

}
...