这是我的问题:
我有一个
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) {
}
}
将图像路径添加到数据库后,您需要刷新 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();
}
}
最常见的方法是在活动中实例化列表和适配器,并在更改列表中的数据时在适配器上调用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()。
当像这样在 onResume 方法调用中返回到 Images Activity 时
public void onResume{
youradapter.refreshrecyclerview(); // implement this method in adpater or simply call here
adpater.notifiDataSetChanged();
}
在adpater中实现这个方法,
public void refreshrecyclerview(){
notifiDataSetChanged();
}
添加图像后,您会调用
notifydatasetchanged()
吗? https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html#notifyDataSetChanged()
将图像添加到
ImagesActivity
后,需要在 dbList
中调用此函数。
请阅读上面链接中的文档以了解notifydatasetchanged()
此方法基本上通知 Adapter
dbList
中的数据已更新,因此必须刷新 UI。