我发现了一个问题,使我的列表视图滚动生涩。我在滚动时从磁盘加载图像。这是示例代码:
private class MyAdapter extends ArrayAdapter<MyListItemExt> {
//...
public View getView(int position, View convertView, ViewGroup parent) {
//...
Bitmap bit = SharedCode.sharedGetImageFromDiskOrInternet(thisAppContext, "contacts" + File.separator + data.image_file_name);
if (bit != null) {
ViewTreeObserver vto = icon.getViewTreeObserver();
vto.addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
icon.getViewTreeObserver().removeGlobalOnLayoutListener(this);
icon.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
SharedCode.sharedUtilScaleImage(icon,false);
}
}
);
icon.setImageBitmap(bit);
icon.setBackgroundColor(data.backgroundColorInt);
icon.setPadding(1, 1, 1, 1);
icon.setVisibility(View.VISIBLE);
}
不确定在这里使用异步是否明智......(如果是这样,那么这样做的最佳方式)如果用户在主 ui 线程中滚动并且图标引用不再有效,那就太糟糕了。
这留下了在启动时预取所有图像的另一种选择,但我不喜欢将图像保存在内存中。
如果用户在列表视图中仍然可以看到 iem,是否可以使用将在后台加载图像并使其在加载时可见的异步构造?这方面有什么“最佳做法”吗?(我还是安卓的菜鸟)