android - 删除图片后如何刷新Recyclerview?

标签 android image

在我的应用程序中,我想删除图像,我已经这样做了,但是每次删除图像时,它都不会刷新 recyclerView。但是当我再次打开文件夹时,Recyclerview 被刷新了。 我想在删除图像时刷新 Recyclerview 这是我删除图像的代码

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

    storage = SimpleStorage.getExternalStorage();
    checkForGalleryDirectories();
    File galleryFiles = new File(path);
    pathContainerView.removeAllViews();
    pathContainerView.addView(createTitleView("Location: " + galleryFiles.getAbsolutePath()));

    File[] files = galleryFiles.listFiles();
    List<GalleryItem> galleryItems = new ArrayList<>();

    String lastModifiedDate = "UNDEFINED";
    SimpleDateFormat formatter = new SimpleDateFormat("E-MMM-yyyy");
    if (files != null) {
        this.adapter.clearGallery();
        for (File file : files) {
            if (file.isDirectory()) {

            } 
                String formattedPicDate = formatter.format(lastMod);
                if (lastModifiedDate != null && !lastModifiedDate.equals(formattedPicDate)) {
                    lastModifiedDate = formattedPicDate;
                    galleryItems.add(new Header(lastModifiedDate));
                    countgridsize++;
                }
                galleryItems.add(new Picture(file.getPath(), file.getName()));

            }
        }
    }
    this.adapter.setGalleryList(galleryItems);
}

 public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_delete:

                final List<String> list = GalleryAdapter.list;
                DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        switch (which) {
                            case DialogInterface.BUTTON_POSITIVE:
                                //Yes button clicked
                                Toast.makeText(GalleryBrowserActivity.this, "Delete Successfully..", Toast.LENGTH_SHORT).show();
                                for (String fileNameStr : list) {
                                    String[] parts = fileNameStr.split("/");
                                    String part1 = parts[5]; // 004
                                    String part2 = parts[6]; // 034556
                                    storage.deleteFile(".AliRehman/" + part1, part2);
                                }
                                break;

                            case DialogInterface.BUTTON_NEGATIVE:
                                //No button clicked

                                break;
                        }
                    }
                };

                AlertDialog.Builder builder = new AlertDialog.Builder(GalleryBrowserActivity.this);
                builder.setMessage("Are you sure?")
                        .setPositiveButton("Yes", dialogClickListener)
                        .setNegativeButton("No", dialogClickListener).show();

                return true;

我的适配器

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

private final Context context;
private final LayoutInflater layoutInflater;
private List<GalleryItem> galleryList = new ArrayList<>();
private OnItemClickListener mItemClickListener;
public static List<String> list;


public GalleryAdapter(Context context, LayoutInflater layoutInflater) {
    this.context = context;
    this.layoutInflater = layoutInflater;
}

public void setItemClickListener(OnItemClickListener listener) {
    mItemClickListener = listener;
}

public void setGalleryList(List<GalleryItem> galleryList) {
    this.galleryList = galleryList;
    notifyDataSetChanged();
}


@Override
public int getItemViewType(int position) {
    return this.galleryList.get(position).getItemType();
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    if(viewType == GalleryItem.HEADER_TYPE) {
        return new HeaderHolder(layoutInflater.inflate(R.layout.item_header, parent, false));
    } else {
        return new PictureHolder(layoutInflater.inflate(R.layout.item_picture, parent, false));
    }
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    GalleryItem item = galleryList.get(position);
    if(getItemViewType(position) == GalleryItem.HEADER_TYPE) {
        bindHeaderHolder((HeaderHolder) holder, (Header) item);
    }
    else {
        bindPictureHolder((PictureHolder) holder, (Picture) item);
    }
}

private void bindPictureHolder(final PictureHolder holder, Picture picture) {
    Glide.with(context).load(Uri.fromFile(new File(picture.getPath()))).into(holder.pictureThumbnail);
    boolean itemselected=picture.getSelected();
    if(itemselected)
    {
        Log.d("ViewVisiblePicture", String.valueOf(picture.getPath()));
        holder.overlayView.setVisibility(View.VISIBLE);
    }
    else
        holder.overlayView.setVisibility(View.GONE);
}

private void bindHeaderHolder(HeaderHolder holder, Header header) {
    holder.headerTxt.setText(header.getName());
}

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

public void clearGallery() {
    this.galleryList.clear();
    notifyDataSetChanged();
}
public class HeaderHolder extends RecyclerView.ViewHolder {

    private TextView headerTxt;

    public HeaderHolder(View itemView) {
        super(itemView);
        this.headerTxt = (TextView) itemView.findViewById(R.id.headerTxt);
    }
}

public class PictureHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {

    public ImageView pictureThumbnail;
    public FrameLayout overlayView;
    public PictureHolder pictureHolder;
    private boolean[] thumbnailsselection;
    public PictureHolder(View itemView) {
        super(itemView);
        itemView.setOnClickListener(this);
        itemView.setOnLongClickListener(this);
        this.pictureThumbnail = (ImageView) itemView.findViewById(R.id.pictureThumbnail);
        this.overlayView = (FrameLayout) itemView.findViewById(R.id.overlayView);
    }
    @Override
    public boolean onLongClick(View view) {
        list=new ArrayList<>();
        if (mItemClickListener != null) {
            mItemClickListener.onItemLongClick(getAdapterPosition());
            this.overlayView.setVisibility(View.VISIBLE);
            Picture model=(Picture) galleryList.get(getAdapterPosition());

            //galleryList.get(getAdapterPosition());
            model.setSelected(true);
            list.add(model.getPath());
            Log.d("Path1", model.getPath());
            final int len = GalleryBrowserActivity.countgridsize;
            int count = 0;
           /* String selectImages = "";
            for (int i = 0; i < len; i++) {
                *//*if (pictureHolder..get(i).selection) {
                    count++;
                    selectImages = selectImages
                            + pictureHolder.images.get(i).id + ",";
                }*//*
                this.overlayView.setVisibility(View.VISIBLE);
            }
            Log.d("Length", len+"");
            if (count == 0) {
                Toast.makeText(context,
                        "Please select at least one image",
                        Toast.LENGTH_LONG).show();
            }*/

            return true;
        }
        Log.d("hi","hello Image");
        notifyDataSetChanged();
        return false;
    }
    @Override
    public void onClick(View v)
    {
        int position = getAdapterPosition();
        Picture picture = (Picture) galleryList.get(position);
        if(GalleryBrowserActivity.mActionMode!=null)
        {
            Log.d("Visiblilty","visible");
            Picture model=(Picture) galleryList.get(getAdapterPosition());
            if(model.getSelected()){
                this.overlayView.setVisibility(View.GONE);
                model.setSelected(false);
                list.remove(model.getPath());
            }else {
                mItemClickListener.onItemClick(position, v, picture.getPath());
                Toast.makeText(context, "visible" + picture.getPath(), Toast.LENGTH_LONG).show();
                this.overlayView.setVisibility(View.VISIBLE);
                model.setSelected(true);
                list.add(model.getPath());
                Log.d("Path2", model.getPath());
            }
            notifyDataSetChanged();
        }
        if (GalleryBrowserActivity.mActionMode==null) {
            Log.d("Visible","invisible");
            Toast.makeText(context,"invisible",Toast.LENGTH_LONG).show();
            mItemClickListener.onItemClick(position, v, picture.getPath());
        }
    }
}
public interface OnItemClickListener
{
    void onItemClick(int position, View v, String picturePath);
    void onItemLongClick(int position);
}
}

最佳答案

我建议您进行以下更改:

GalleryAdapter :

来自:

public static List<String> list;

收件人:

public static List< GalleryItem > list;

并在你的 GalleryAdapter 中添加一个函数从您的 galleryList 中删除项目:

public void removeItem(GalleryItem item){
    this.galleryList.remove(item);
    notifyDataSetChanged();
}

并在 PictureHolder :

@Override
public boolean onLongClick(View view) {
    list=new ArrayList<>();
    if (mItemClickListener != null) {
        mItemClickListener.onItemLongClick(getAdapterPosition());
        this.overlayView.setVisibility(View.VISIBLE);
        GalleryItem model=(GalleryItem) galleryList.get(getAdapterPosition());

        //galleryList.get(getAdapterPosition());
        ((Picture)model).setSelected(true);
        list.add(model);
        Log.d("Path1", ((Picture)model).getPath());
        final int len = GalleryBrowserActivity.countgridsize;
        int count = 0;
        return true;
    }
    Log.d("hi","hello Image");
    notifyDataSetChanged();
    return false;
}

@Override
public void onClick(View v)
{
    int position = getAdapterPosition();
    GalleryItem picture = (GalleryItem) galleryList.get(position);
    if(GalleryBrowserActivity.mActionMode!=null)
    {
        Log.d("Visiblilty","visible");
        GalleryItem model=(GalleryItem) galleryList.get(getAdapterPosition());
        if(model.getSelected()){
            this.overlayView.setVisibility(View.GONE);
            ((Picture)model).setSelected(false);
            list.remove(model);
        }else {
            mItemClickListener.onItemClick(position, v, picture.getPath());
            Toast.makeText(context, "visible" + picture.getPath(), Toast.LENGTH_LONG).show();
            this.overlayView.setVisibility(View.VISIBLE);
            ((Picture)model).setSelected(true);
            list.add(model);
            Log.d("Path2", model.getPath());
        }
        notifyDataSetChanged();
    }
    if (GalleryBrowserActivity.mActionMode==null) {
        Log.d("Visible","invisible");
        Toast.makeText(context,"invisible",Toast.LENGTH_LONG).show();
        mItemClickListener.onItemClick(position, v, picture.getPath());
    }
}

在上面的代码中,我试图更新 list选择了 GallryItem对象。 并且在删除 DialogInterface.BUTTON_POSITIVE 之后的项目时被点击,更新如下代码:

case DialogInterface.BUTTON_POSITIVE:
                            //Yes button clicked
                            Toast.makeText(GalleryBrowserActivity.this, "Delete Successfully..", Toast.LENGTH_SHORT).show();
                            for (GalleryItem item : list) {
                                this.adapter.removeItem(item);
                                String fileNameStr = ((Picture)item).getPath();
                                String[] parts = fileNameStr.split("/");
                                String part1 = parts[5]; // 004
                                String part2 = parts[6]; // 034556
                                storage.deleteFile(".AliRehman/" + part1, part2);
                            }
                            break;

上面的代码也会更新galleryList里面adapter并通知数据集更改。如果您在实现过程中遇到任何问题,请告诉我。

关于android - 删除图片后如何刷新Recyclerview?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42641800/

相关文章:

android - 有没有办法处理小部件/服务中的关键事件?

android - 如何添加没有日期对象而不是日历对象

java - 设置 TextView 文本时应用程序卡住

Android ListView 行 View 左右边框拉伸(stretch)到高度

java - java中的直方图计算

php - 使用 php Imagick 保留背景调整 PNG 的大小

image - Golang image/gif EncodeAll有很多黑点

java.sql.SQLException : Before start of result set

Android路径复制构造函数失败?

image - Yii2 如何显示保存在 web 文件夹中的图像