如何通知RecyclerView Items的变化

问题描述 投票:0回答:4

这是我的问题:

我有一个

AlbumActivity
,它使用
RecyclerView
列出了所有专辑名称。

单击一个项目时,它将转到

ImagesActivity
,其中将列出相册中的所有图像。我也用过
RecyclerView
ImagesActivity
有一个工具栏菜单,可以添加多个图像,以防用户想要将其他图像添加到相册中。单击菜单时,将打开另一个活动以将图像路径添加到数据库。

我的问题是,当我返回

ImagesActivity
时,图像不会出现。仅当我再次转到
AlbumActivity
再次查看相册的图像时,图像才会出现。如何在
ImagesActivity
.

中快速通知更改

这是我的适配器:

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

    static List<GettersSetters> dbList;
    static Context context;

    ImageAdapter(Context context, List<GettersSetters> dbList) {
        this.dbList = new ArrayList<GettersSetters>();
        this.context = context;
        this.dbList = dbList;

    }

    @Override
    public ImageAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(
                R.layout.item_image, null);

        ViewHolder viewHolder = new ViewHolder(itemLayoutView);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ImageAdapter.ViewHolder holder, int position) {
        File imageFile = new File(dbList.get(position).getPath());
        if(imageFile.exists()){
            Bitmap img = decodeBitmapWithSize(dbList.get(position).getPath(),300,150, true);
            holder.imageGallery.setImageBitmap(img);
        }else{
            holder.imageGallery.setImageResource(R.drawable.not_found);
        }

    }

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

    public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        public ImageView imageGallery;

        public ViewHolder(View itemLayoutView) {
            super(itemLayoutView);
            imageGallery = (ImageView) itemLayoutView.findViewById(R.id.img_row);
            itemLayoutView.setOnClickListener(this);
            itemLayoutView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    Toast.makeText(context,"Delete Image",Toast.LENGTH_LONG).show();
                    return true;
                }
            });
        }

        @Override
        public void onClick(View v) {

        }
    }
android sqlite android-recyclerview
4个回答
0
投票

将图像路径添加到数据库后,您需要刷新 dbList。

当您返回到 Images Activity 时,您会在 onActivityResult 中从数据库中获取新的 dbList。您可以按如下方式刷新 dbList:

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

    public void updateList(List<GettersSetters> dbList) {
        this.dbList.clear();
        this.dbList.addAll(dbList);
        notifyDataSetChanged();
    }
}

0
投票

最常见的方法是在活动中实例化列表和适配器,并在更改列表中的数据时在适配器上调用notifyDataSetChanged。

例如,在您的 Activity 课程中...

List<GetterSetter> list;
ImageAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    list = new ArrayList();
    adapter = new ImageAdapter(this, list);
    // you will also need to attach your adapter to your recyclerview.

    // when you are ready to modify/add/delete items from the list, just do it and call notifyDataSetChanged
    list.add(new GetterSetter());
    adapter.notifyDataSetChanged();  // This will update your recyclerview to show one item, instead of an empty list
}

简而言之,您显然向您的适配器传递了一个列表。每当您更改列表中的任何数据时,请确保在适配器对象上调用notifyDataSetChanged()。


0
投票

当像这样在 onResume 方法调用中返回到 Images Activity 时

public void onResume{
youradapter.refreshrecyclerview(); // implement this method in adpater or simply call here
adpater.notifiDataSetChanged();
}

在adpater中实现这个方法,

public void refreshrecyclerview(){
notifiDataSetChanged();
}

0
投票

添加图像后,您会调用

notifydatasetchanged()
吗? https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html#notifyDataSetChanged()

将图像添加到

ImagesActivity
后,需要在
dbList
中调用此函数。 请阅读上面链接中的文档以了解
notifydatasetchanged()
此方法基本上通知
Adapter
dbList
中的数据已更新,因此必须刷新 UI。

© www.soinside.com 2019 - 2024. All rights reserved.