单击onRecyclerView项时更改图像URL [英] Image url changing while cliking onRecyclerView item

查看:176
本文介绍了单击onRecyclerView项时更改图像URL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 private DisplayImageOptions options;
@Override
public TaskViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.task, parent, false);


    options = new DisplayImageOptions.Builder()
            .cacheInMemory(true)
            .cacheOnDisk(true)
            .considerExifParams(true)
            .postProcessor(new BitmapProcessor() {
                @Override
                public Bitmap process(Bitmap bitmap) {
                    return Bitmap.createScaledBitmap(bitmap,200,200,false);
                }
            })
            .build();

    TaskViewHolder tvh = new TaskViewHolder(v);
    return tvh;
}

@Override
public void onBindViewHolder(TaskViewHolder holder, int position) {
    holder.task_title.setText(tasks.get(position).get_title());
    holder.task_date_to_end.setText(tasks.get(position).get_description());

       try {
        /*Picasso.with(context).load(tasks.get(position).get_url_to_icon()).resize(200, 200).into(holder.task_url_to_icon);*/
      ImageLoader.getInstance().displayImage(tasks.get(position).get_url_to_icon(),holder.task_url_to_icon,options);
    } catch (Exception e) {}


    if (tasks.get(position).isSelected()) {
        holder.task_layout.setBackgroundColor(Color.parseColor("#d5d5d5"));
    } else {
        holder.task_layout.setBackgroundColor(Color.TRANSPARENT);
    }
}

我正在使用Picasso库将URL更改为图像.当我在列表中选择smth时,其他项目上的图片会随机更改(总是与其他项目中的现有网址一起更改)

我试图使用Universal-Image-Loader,但是我什么也没有.它可能是实现问题.

解决方案

尝试一下:

public class TaskAdapter extends RecyclerView.Adapter<TaskViewHolder> {

List<Task> tasks;
protected Context context;
private DisplayImageOptions options;
public TaskAdapter(List<Task> tasks, Context context) {

    //-----------This lines---------------//

    DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
            .cacheInMemory(true).cacheOnDisk(true)
            .imageScaleType(ImageScaleType.EXACTLY)
            .displayer(new FadeInBitmapDisplayer(300)).build();

    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
            context)
            .defaultDisplayImageOptions(defaultOptions)
            .memoryCache(new WeakMemoryCache()).diskCacheSize(100 * 1024 * 1024).build();

    ImageLoader.getInstance().init(config);

    //-----------This lines---------------//
    options = new DisplayImageOptions.Builder()
            .showImageOnLoading(R.drawable.face)
            .showImageForEmptyUri(R.drawable.face)
            .showImageOnFail(R.drawable.face).cacheInMemory(true)
            .cacheOnDisk(true).considerExifParams(true).build();
    this.tasks = tasks;
    this.context = context;
}

@Override
public TaskViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.task, parent, false);



    TaskViewHolder tvh = new TaskViewHolder(v);
    return tvh;
}

@Override
public void onBindViewHolder(TaskViewHolder holder, int position) {
    holder.task_title.setText(tasks.get(position).get_title());
    holder.task_date_to_end.setText(tasks.get(position).get_description());
    holder.task_url_to_icon.setVisibility(View.VISIBLE);
       try {
            ImageLoader.getInstance().displayImage(tasks.get(position).get_url_to_icon(),holder.task_url_to_icon,options);

    } catch (Exception e) {
           Log.d("EXP",e.getMessage());
    }

    if (tasks.get(position).isSelected()) {
        holder.task_layout.setBackgroundColor(Color.parseColor("#d5d5d5"));
    } else {
        holder.task_layout.setBackgroundColor(Color.TRANSPARENT);
    }
}
public void setSelected(int pos) {
    try {
        tasks.get(pos).setSelected(!tasks.get(pos).isSelected());
        notifyDataSetChanged();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public void add(int position, Task task) {
    tasks.add(task);
    notifyItemInserted(position);
}

public void deleteSelectedItems() {
    for(int i=0;i<getItemCount();++i){
        if(tasks.get(i).isSelected()==true)
        {   tasks.remove(i);
             notifyItemRemoved(i);i=0;
           }
    }
}

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

启动应用程序时,必须编写一次用//-----------This lines---------------//注释括起来的代码.如果您有任何ApplicationLoader类,则将其放在其中.适配器初始化时不需要每次都写这些行.

或将它们保持原样不会有任何区别.这只是一个澄清.

 private DisplayImageOptions options;
@Override
public TaskViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.task, parent, false);


    options = new DisplayImageOptions.Builder()
            .cacheInMemory(true)
            .cacheOnDisk(true)
            .considerExifParams(true)
            .postProcessor(new BitmapProcessor() {
                @Override
                public Bitmap process(Bitmap bitmap) {
                    return Bitmap.createScaledBitmap(bitmap,200,200,false);
                }
            })
            .build();

    TaskViewHolder tvh = new TaskViewHolder(v);
    return tvh;
}

@Override
public void onBindViewHolder(TaskViewHolder holder, int position) {
    holder.task_title.setText(tasks.get(position).get_title());
    holder.task_date_to_end.setText(tasks.get(position).get_description());

       try {
        /*Picasso.with(context).load(tasks.get(position).get_url_to_icon()).resize(200, 200).into(holder.task_url_to_icon);*/
      ImageLoader.getInstance().displayImage(tasks.get(position).get_url_to_icon(),holder.task_url_to_icon,options);
    } catch (Exception e) {}


    if (tasks.get(position).isSelected()) {
        holder.task_layout.setBackgroundColor(Color.parseColor("#d5d5d5"));
    } else {
        holder.task_layout.setBackgroundColor(Color.TRANSPARENT);
    }
}

Im using picasso library to change url to image. While i selecting smth on list the image on the other items changes randomly (always changing with existing urls from another items)

EDIT: Im tried to use Universal-Image-Loader, but i,ve got nothing. Its probably implementation problem.

解决方案

Try this :

public class TaskAdapter extends RecyclerView.Adapter<TaskViewHolder> {

List<Task> tasks;
protected Context context;
private DisplayImageOptions options;
public TaskAdapter(List<Task> tasks, Context context) {

    //-----------This lines---------------//

    DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
            .cacheInMemory(true).cacheOnDisk(true)
            .imageScaleType(ImageScaleType.EXACTLY)
            .displayer(new FadeInBitmapDisplayer(300)).build();

    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
            context)
            .defaultDisplayImageOptions(defaultOptions)
            .memoryCache(new WeakMemoryCache()).diskCacheSize(100 * 1024 * 1024).build();

    ImageLoader.getInstance().init(config);

    //-----------This lines---------------//
    options = new DisplayImageOptions.Builder()
            .showImageOnLoading(R.drawable.face)
            .showImageForEmptyUri(R.drawable.face)
            .showImageOnFail(R.drawable.face).cacheInMemory(true)
            .cacheOnDisk(true).considerExifParams(true).build();
    this.tasks = tasks;
    this.context = context;
}

@Override
public TaskViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.task, parent, false);



    TaskViewHolder tvh = new TaskViewHolder(v);
    return tvh;
}

@Override
public void onBindViewHolder(TaskViewHolder holder, int position) {
    holder.task_title.setText(tasks.get(position).get_title());
    holder.task_date_to_end.setText(tasks.get(position).get_description());
    holder.task_url_to_icon.setVisibility(View.VISIBLE);
       try {
            ImageLoader.getInstance().displayImage(tasks.get(position).get_url_to_icon(),holder.task_url_to_icon,options);

    } catch (Exception e) {
           Log.d("EXP",e.getMessage());
    }

    if (tasks.get(position).isSelected()) {
        holder.task_layout.setBackgroundColor(Color.parseColor("#d5d5d5"));
    } else {
        holder.task_layout.setBackgroundColor(Color.TRANSPARENT);
    }
}
public void setSelected(int pos) {
    try {
        tasks.get(pos).setSelected(!tasks.get(pos).isSelected());
        notifyDataSetChanged();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public void add(int position, Task task) {
    tasks.add(task);
    notifyItemInserted(position);
}

public void deleteSelectedItems() {
    for(int i=0;i<getItemCount();++i){
        if(tasks.get(i).isSelected()==true)
        {   tasks.remove(i);
             notifyItemRemoved(i);i=0;
           }
    }
}

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

The code surrounded with //-----------This lines---------------// comment needed to be written once when application gets started. If you have any ApplicationLoader class then put this in that. No need to write these line every time when adapter initializes..!!

Or leaving them as they are will not make any difference. It was just a clarification.

这篇关于单击onRecyclerView项时更改图像URL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆