从内部存储和arraylist

时间:2016-11-10 07:14:46

标签: android android-recyclerview

基本上,我将图像保存在内部存储的目录中。然后我使用ArrayList在recyclerview中显示它们。行布局中的每个图像上都有一个十字按钮(参见屏幕截图)。我需要根据其位置删除图像,不仅来自recyclerview,还来自内部目录。我能够从recyclerview的arraylist中删除图像,但目录中的图像不会被删除。

// Method in activity to show images from int. storage to recyclerview.

private void showImages(){

        File directory = new File(file_path);
        File newfile[] = directory.listFiles();

        Log.e("sammy_arrlistsize_befor"," "+finalImages.size());

        if(finalImages!=null )finalImages.clear();

        for (int i= 0; i < newfile.length; i++) {
            String path = "file://"+newfile[i].getAbsolutePath();
            finalImages.add(path);
            Log.e("sammy_imagepath"," "+path);
        }

        Log.e("sammy_arrlistsize_after"," "+finalImages.size());

        recyladapter.notifyDataSetChanged();

    }
//Adapter

public class RecycleImageAdapter extends RecyclerView.Adapter<RecycleImageAdapter.ViewHolder> {

    private List<String> itemList;
    private Context mContext;

    public RecycleImageAdapter(Context context, List<String> itemList) {
        this.itemList = itemList;
        this.mContext = context;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.imagelayout, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, int position) {

            Uri uri = Uri.parse(itemList.get(position));
            holder.setImageView(uri);

    }

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

    class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

        ImageView image, delbtn;

        ViewHolder(View itemView) {
            super(itemView);
            image = (ImageView) itemView.findViewById(R.id.img_thumbnail);
            delbtn = (ImageView)itemView.findViewById(R.id.del);
            delbtn.setOnClickListener(this);
        }

        public void setImageView(Uri uri){
            Picasso.with(mContext).load(uri).into(new Target() {
                @Override
                public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                    image.setImageBitmap(bitmap);
                }

                @Override
                public void onBitmapFailed(Drawable errorDrawable) {
                    Log.e("sammy_error"," "+errorDrawable);
                }

                @Override
                public void onPrepareLoad(Drawable placeHolderDrawable) {

                }
            });
        }

        @Override
        public void onClick(View view) {
//Here I'm deleting image
            int position = getAdapterPosition();
            Toast.makeText(mContext, itemList.get(position), Toast.LENGTH_SHORT).show();


            File file = new File(itemList.get(position));
            file.delete();

            itemList.remove(position);
            notifyItemRemoved(position);
            notifyItemRangeChanged(position, itemList.size());
        }
    }
}

enter image description here

4 个答案:

答案 0 :(得分:1)

在你的点击方式中:

采取文件路径

String path = "file://"+newfile[i].getAbsolutePath();
File file = new File(path);
file.delete();

试试这段代码。

答案 1 :(得分:0)

我只使用图像的绝对路径即newfile[i].getAbsolutePath()得到了所需的结果,因此路径就像/storage/emulated/0/SAM/IMG_1110.jpg一样。

答案 2 :(得分:0)

final int position = viewHolder.getAdapterPosition();

/*get a path in list file */
final File file = new File(listFile[position].getAbsolutePath());

file.delete();

答案 3 :(得分:0)

这对我有用

  Uri uri = Uri.fromFile(new File(mList.get(position).getPath()));
    File fdelete = new File(uri.getPath());
            if (fdelete.exists()) {
                if (fdelete.delete()) {
                    Log.d("filedel","file Deleted :" + uri.getPath());
                } else {
                    Log.d("filedel","file  not Deleted :" + uri.getPath());
                }
            }