首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RecyclerView添加项目

RecyclerView添加项目
EN

Stack Overflow用户
提问于 2018-01-30 05:55:54
回答 2查看 70关注 0票数 0

通过保存新图像,我想将其添加到RecyclerView中。我的问题是,它不能与此一起工作:

代码语言:javascript
运行
复制
 profilAdapterImages.notifyItemInserted(list.size() -1);
 profilAdapterImages.notifyDataSetChanged();

我不想重新加载活动,我想要动画。

这是我在数据库中保存图像时使用的onActivityResult格式。

代码语言:javascript
运行
复制
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);
}

适配器:

代码语言:javascript
运行
复制
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;
}
}

我做错了什么?

我把毕加索的照片从我的网站上下载下来。在数据库中,它们保存在一行中,用分号分隔。

EN

回答 2

Stack Overflow用户

发布于 2018-01-30 11:02:45

notify profilAdapterImages.notifyDataSetChanged();不会执行任何操作,除非适配器RecyclerView自动刷新,这意味着您必须滚动才能使更改生效

或者你有另一个选择:

我会将Adapter与其本身互换。

例如,如果您最初将适配器设置为:

代码语言:javascript
运行
复制
ProfilAdapterImages  mAdapter = new ProfilAdapterImages(list, context, imageSettingsCallback);
recyclerview.setAdapter(mAdapter);
recyclerview.setHasFixedSize(true);
mAdapter.notifyDataSetChanged();

您有了Adapter,只需将Adapter与其本身交换,如下所示:

代码语言:javascript
运行
复制
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();

      ....
    }
票数 0
EN

Stack Overflow用户

发布于 2018-04-30 20:21:20

由OP提供解决方案。

我加载了新的数据,清除了列表,并添加了新的notifyDataSetChanged和smoothScrollToPosition。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48510629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档