gpt4 book ai didi

java - Universal-Image-Loader:错误的位图附加到 ImageView

转载 作者:搜寻专家 更新时间:2023-10-30 21:20:01 25 4
gpt4 key购买 nike

我一直在评估 NOSTRAUniversal-Image-Loader异步下载图像并在 ListView 中显示它们的库。到目前为止,它工作正常,除了一个问题。

有时,当滚动列表时,内存缓存中的位图会附加到错误的 ImageViews。滚动停止后,将附加正确的图像。这种情况很少见,我找不到 100% 的方法来重现它。我拍了一个video上次发生。

这是 ArticleAdapter 代码,UIL 配置和 bindView() 方法都可以在那里找到。

public class ArticleAdapter extends CursorAdapter {
private LayoutInflater inflater;
private ViewHolder holder;

public ArticleAdapter(Context context, Cursor cursor, boolean autoRequery) {
super(context, cursor, autoRequery);
imageLoader = ImageLoader.getInstance();
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.download_progress_thumb)
.cacheInMemory()
.cacheOnDisc()
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
.build();
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(context)
.threadPriority(Thread.NORM_PRIORITY - 2)
.threadPoolSize(4)
.discCache(new UnlimitedDiscCache(Utils.getCacheDirectory(context)))
.defaultDisplayImageOptions(options)
.build();
imageLoader.init(configuration);

titleIndex = cursor.getColumnIndex(Articles.TITLE);
descriptionIndex = cursor.getColumnIndex(Articles.DESCRIPTION);
isUnreadIndex = cursor.getColumnIndex(Articles.IS_UNREAD);
isNewIndex = cursor.getColumnIndex(Articles.IS_NEW);
urlIndex = cursor.getColumnIndex(Articles.URL);
hostIndex = cursor.getColumnIndex(Articles.HOST);
timeIndex = cursor.getColumnIndex(Articles.PUBLISH_TIME);

bkgUnreadArticle = context.getResources().getColor(R.color.list_bkg_unread_article);
bkgReadArticle = context.getResources().getColor(R.color.list_bkg_read_article);
textUnreadTitle = context.getResources().getColor(R.color.list_text_unread_title);
textReadTitle = context.getResources().getColor(R.color.list_text_read_title);

inflater = LayoutInflater.from(context);
}

@Override
public void bindView(View view, Context context, Cursor cursor) {
String date = Utils.format(cursor.getLong(timeIndex), Utils.DATE);
holder = (ViewHolder) view.getTag();

holder.titleView.setText(cursor.getString(titleIndex));
holder.descriptionView.setText(date);

int isNew = cursor.getInt(isNewIndex);
if (isNew == 1)
holder.isNewView.setVisibility(View.VISIBLE);
else
holder.isNewView.setVisibility(View.INVISIBLE);

int isUnread = cursor.getInt(isUnreadIndex);
if (isUnread == 1){
holder.titleView.setTextColor(textUnreadTitle);
holder.rowLayout.setBackgroundColor(bkgUnreadArticle);
} else {
holder.titleView.setTextColor(textReadTitle);
holder.rowLayout.setBackgroundColor(bkgReadArticle);
}

String url = cursor.getString(urlIndex);
String host = cursor.getString(hostIndex);
if (host.equalsIgnoreCase(Consts.HOST_LENTA) || host.equalsIgnoreCase(Consts.HOST_REALTY)) {
holder.thumbView.setVisibility(View.VISIBLE);
imageLoader.displayImage(Utils.makeImageUrl(url, Utils.THUMBNAIL), holder.thumbView);
} else
holder.thumbView.setVisibility(View.GONE);
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View v = inflater.inflate(R.layout.articlelist_item, null);
ViewHolder holder = new ViewHolder();
holder.titleView = (TextView) v.findViewById(R.id.list_title);
holder.descriptionView = (TextView) v.findViewById(R.id.list_description);
holder.thumbView = (ImageView) v.findViewById(R.id.list_thumb);
holder.isNewView = (TextView) v.findViewById(R.id.list_read_unread);
holder.rowLayout = (LinearLayout) v.findViewById(R.id.list_row);

v.setTag(holder);
return v;
}
}

我将非常感谢在这件事上的任何帮助。

最佳答案

对于 ListView、GridView 和其他在其适配器中重复使用 View 的列表,您应该在 DisplayImageOptions 中调用 .resetViewBeforeLoading() 以防止这种影响。 p>

还有文档说:

Init ImageLoader with configuration only once

你只做一次吗?适配器的构造函数不是它的好地方。

UPD:抱歉,我的回答没有用。 .resetViewBeforeLoading() 没有帮助,因为您使用了 .showStubImage(...)。所以你应该有正确的 UIL 工作,但你没有。这很奇怪。

关于java - Universal-Image-Loader:错误的位图附加到 ImageView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14080117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com