Glide v4和Listview

时间:2017-08-18 00:12:00

标签: android listview android-glide

我有一个带有自定义BaseAdapter的ListView和一个用于过滤列表的搜索工具栏,每次点击工具栏或我放置一个过滤器(读取:每次刷新列表时)都会因图像而闪烁重装...我怎么能避免这个?

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = inflater.inflate(R.layout.listview_row, parent, false);
        holder = new ViewHolder();
        holder.flag = (ImageView) convertView.findViewById(R.id.flag);
        holder.name = (TextView) convertView.findViewById(R.id.name);
        holder.place = (TextView) convertView.findViewById(R.id.place);
        convertView.setTag(holder);
    }
    else
        holder = (ViewHolder) convertView.getTag();

    holder.name.setText(customList.get(position).name);
    holder.place.setText(customList.get(position).city + ", " +
            customList.get(position).region + ", " +
            customList.get(position).state);
    String url = context.getString(R.string.main_server) + "flags/" + customList.get(position).state.toLowerCase() + ".png";
    Glide.with(context).load(url).into(holder.flag);
    return convertView;
}

2 个答案:

答案 0 :(得分:0)

将图像保存到缓存,不会再次获取它们,并在每次应用过滤器时再次设置。以下是

的代码
apply(RequestOptions.diskCacheStrategyOf(DiskCacheStrategy.AUTOMATIC))

注意:这是滑翔4.0.0。

答案 1 :(得分:0)

看起来我自己找到了答案,但我仍然不知道它为什么会起作用......如果对任何人都有用,我会留下它: 将装载部分更改为此

Glide.with(context).load(url).apply(new RequestOptions().fitCenter().override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)).into(holder.flag);

解决了这个问题。