2016-11-10 49 views
1

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

// 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

+0

请检查我的代码 –

回答

0

我通过仅使用图像的绝对路径即newfile[i].getAbsolutePath()获得了期望的结果,因此路径将如此/storage/emulated/0/SAM/IMG_1110.jpg

0

在您的点击mehod:

取文件路径

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

试试这个代码。

+0

我已经从目前的代码中获得这样的路径:'file /// storage/emulated/0/SAM/IMG_1110.jpg'。 – CodeAssasins

+0

@CodeAssasins然后在新文件(路径)中发送此路径;并尝试删除 –