这是我的问题:
我有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) {
}
}
答案 0 :(得分:0)
添加图片后,您是否正在调用notifydatasetchanged()
? https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html#notifyDataSetChanged()
将图像添加到ImagesActivity
后,需要在dbList
中调用此项。
请阅读上述链接中的文档以了解notifydatasetchanged()
此方法基本上通知Adapter
dbList
中的数据已更新,因此必须刷新UI。
答案 1 :(得分: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();
}
}
答案 2 :(得分:0)
最常见的方法是在活动中实例化List和Adapter,并在更改列表中的数据时在适配器上调用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
}
简而言之,您显然会将适配器传递给List。每次更改列表中的任何数据时,请确保在适配器对象上调用notifyDataSetChanged()。
答案 3 :(得分: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();
}