通过保存新图像,我想将其添加到RecyclerView中。我的问题是,它不能与此一起工作:
profilAdapterImages.notifyItemInserted(list.size() -1);
profilAdapterImages.notifyDataSetChanged();我不想重新加载活动,我想要动画。
这是我在数据库中保存图像时使用的onActivityResult格式。
savePicture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
progressBar.setVisibility(View.VISIBLE);
encodeBase64 base64 = new encodeBase64();
Map<String,String> map = new HashMap<>();
map.put("username",USERNAME);
map.put("row","IMAGELINK");
map.put("data",base64.encodeImage(bitmap,
Bitmap.CompressFormat.JPEG,70));
map.put("mode","2");
updateData updateData = new updateData(Profil.this);
updateData.sendDataUpdate(map, new VolleyCallback() {
@Override
public void onUserExists(String[] result) {
if(result[0].equals("ok")){
previewPicture.dismiss();
Toast.makeText(Profil.this, "Dein Bild wurde gespeichert!", Toast.LENGTH_SHORT).show();
profilAdapterImages.notifyItemInserted(list.size() -1);
profilAdapterImages.notifyDataSetChanged();
}
}
@Override
public void OnSuccess() {
}
@Override
public void OnError(String ErrorMessage) {
}
});
progressBar.setVisibility(View.VISIBLE);
}适配器:
public class ProfilAdapterImages extends RecyclerView.Adapter<ProfilAdapterImages.ViewHolder>{
List<getterImages> list;
Context context;
ImageSettingsCallback imageSettingsCallback;
public ProfilAdapterImages(List<getterImages> list, Context context, ImageSettingsCallback imageSettingsCallback) {
this.list = list;
this.context = context;
this.imageSettingsCallback = imageSettingsCallback;
}
@Override
public ProfilAdapterImages.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.image_slider,parent,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(final ProfilAdapterImages.ViewHolder holder, final int position) {
getterImages getterImages = list.get(position);
Picasso.with(context).load(getterImages.getImageURL()).resize(200,200).centerCrop().into(holder.blurImageView, new Callback() {
@Override
public void onSuccess() {
holder.blurImageView.setBlur(20);
}
@Override
public void onError() {
}
});
Picasso.with(context).load(getterImages.getImageURL()).placeholder(R.drawable.preload).resize(200,200).centerCrop().into(holder.imageView, new Callback() {
@Override
public void onSuccess() {
RoundedBitmapDrawable roundedBitmapDrawable = RoundedBitmapDrawableFactory.create(context.getResources(),drawableToBitmap(holder.imageView.getDrawable()));
roundedBitmapDrawable.setCircular(true);
holder.imageView.setImageDrawable(roundedBitmapDrawable);
}
@Override
public void onError() {
}
});
holder.imageButtonImageSettings.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
imageSettingsCallback.onImageSettings(position);
}
});
}
@Override
public int getItemCount() {
return list.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
BlurImageView blurImageView;
ImageView imageView;
ImageButton imageButtonImageSettings;
public ViewHolder(View itemView) {
super(itemView);
blurImageView = itemView.findViewById(R.id.imageViewSlider);
imageView = itemView.findViewById(R.id.imageView);
imageButtonImageSettings = itemView.findViewById(R.id.imageButtonImageSettings);
}
}
public static Bitmap drawableToBitmap (Drawable drawable) {
Bitmap bitmap = null;
if (drawable instanceof BitmapDrawable) {
BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
if(bitmapDrawable.getBitmap() != null) {
return bitmapDrawable.getBitmap();
}
}
if(drawable.getIntrinsicWidth() <= 0 || drawable.getIntrinsicHeight() <= 0) {
bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); // Single color bitmap will be created of 1x1 pixel
} else {
bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
}
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
return bitmap;
}
}我做错了什么?
我把毕加索的照片从我的网站上下载下来。在数据库中,它们保存在一行中,用分号分隔。
发布于 2018-01-30 11:02:45
notify profilAdapterImages.notifyDataSetChanged();不会执行任何操作,除非适配器和RecyclerView自动刷新,这意味着您必须滚动才能使更改生效
或者你有另一个选择:
我会将Adapter与其本身互换。
例如,如果您最初将适配器设置为:
ProfilAdapterImages mAdapter = new ProfilAdapterImages(list, context, imageSettingsCallback);
recyclerview.setAdapter(mAdapter);
recyclerview.setHasFixedSize(true);
mAdapter.notifyDataSetChanged();您有了Adapter,只需将Adapter与其本身交换,如下所示:
savePicture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ProfilAdapterImages nAdapter = new ProfilAdapterImages(list, context, imageSettingsCallback);
recyclerview.setAdapter(nAdapter);
recyclerview.setHasFixedSize(true);
nAdapter.notifyDataSetChanged();
....
}发布于 2018-04-30 20:21:20
由OP提供解决方案。
我加载了新的数据,清除了列表,并添加了新的notifyDataSetChanged和smoothScrollToPosition。
https://stackoverflow.com/questions/48510629
复制相似问题