Android 从内部存储器和arraylist中删除图像文件

Android 从内部存储器和arraylist中删除图像文件,android,android-recyclerview,Android,Android Recyclerview,基本上,我将图像保存在内部存储器的目录中。然后我使用ArrayList在recyclerview中显示它们。行布局中的每个图像上都有一个交叉按钮(请参见屏幕截图)。我需要删除图像,根据其位置不仅从recyclerview,而且从内部目录。我能够从recyclerview的arraylist中删除该图像,但该目录中的图像不会被删除 //活动中显示从int.storage到recyclerview的图像的方法。 私有void showImages(){ 文件目录=新文件(文件路径); File n

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

//活动中显示从int.storage到recyclerview的图像的方法。
私有void showImages(){
文件目录=新文件(文件路径);
File newfile[]=directory.listFiles();
Log.e(“sammy_arrlistsize_befor”,“”+finalImages.size());
如果(finalImages!=null)finalImages.clear();
for(int i=0;i
//适配器
公共类RecycleImageAdapter扩展了RecyclerView.Adapter{
私人清单项目清单;
私有上下文;
公共RecycleImageAdapter(上下文上下文,列表项列表){
this.itemList=itemList;
this.mContext=上下文;
}
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
View=LayoutInflater.from(parent.getContext()).flate(R.layout.imagelayout,parent,false);
返回新的ViewHolder(视图);
}
@凌驾
公共无效onBindViewHolder(最终ViewHolder,内部位置){
Uri=Uri.parse(itemList.get(position));
holder.setImageView(uri);
}
@凌驾
public int getItemCount(){
返回此.itemList.size();
}
类ViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
图像视图图像,delbtn;
ViewHolder(视图项视图){
超级(项目视图);
image=(ImageView)itemView.findViewById(R.id.img_缩略图);
delbtn=(ImageView)itemView.findViewById(R.id.del);
delbtn.setOnClickListener(此);
}
公共void setImageView(Uri){
Picasso.with(mContext.load(uri).into(newtarget()){
@凌驾
已加载位图(位图位图,Picasso.LoadedFrom){
setImageBitmap(位图);
}
@凌驾
公共无效onBitmapFailed(Drawable errorDrawable){
Log.e(“sammy_error”,即“+errorDrawable”);
}
@凌驾
准备加载时的公共无效(可提取占位符可提取){
}
});
}
@凌驾
公共void onClick(视图){
//在这里我删除图像
int position=getAdapterPosition();
Toast.makeText(mContext、itemList.get(position)、Toast.LENGTH\u SHORT.show();
File File=新文件(itemList.get(position));
delete();
项目列表。删除(位置);
已移除(位置)的项目;
notifyItemRangeChanged(位置,itemList.size());
}
}

}
在您的点击方式中:

获取文件路径

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

试试这段代码。

我只使用了图像的绝对路径,即
newfile[I].getAbsolutePath()
就得到了想要的结果,因此路径应该是这样的
/storage/emulated/0/SAM/IMG_1110.jpg
这对我来说很有效

final int position = viewHolder.getAdapterPosition();

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

file.delete();
  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());
                }
            }

请检查我的代码我已经从当前代码中获得如下路径:
文件///storage/emulated/0/SAM/IMG_1110.jpg
。@code然后将此路径发送到新文件(路径)中;试着删除它是否反映在你的画廊里?我从file.delete()中得到了真值,但它没有反映在我的gallery@Maverick7删除或添加文件后,请使用MediaScanner进行刷新。这似乎不会添加其他答案所没有的任何内容。也许对为什么这是不同的和更好的解释将有助于使这个答案有用。