Android:Listadapter加载下载的图像

时间:2013-12-04 11:29:53

标签: android listview listadapter baseadapter custom-adapter

我尝试使用 BaseAdapter 创建自定义 Listadapter ,在此适配器中图片网址和适配器必须下载所有内容然后更新视图..

所有事情都已完成且工作正常,但我的问题是我无法移动列表视图当图片仍在加载我应该等待完成加载每件事情然后我就可以了移动..

我认为问题发生是因为列表视图返回顶部索引每次更新因为我更新了每个图像完成下载但我不确定因为列表冻结所以我无法移动它来确认,或者有还有别的......

我使用以下命令更新listadapter:

adap.notifyDataSetChanged();

这是所有细节,我希望任何人都知道如何解决这个问题帮助我并告诉我什么是更正视图没有问题的正确方法(返回第一个索引,冻结)..

注意:下载没问题,我只能在加载和更新时下载问题时移动列表。

解决:

我检查了我的代码下载功能ok和来自更新适配器的冻结:

adp.notifyDataSetChanged(); 

需要几秒钟才能更新,所以我更改了更新方式:

int index = lst.getFirstVisiblePosition();
    View v = lst.getChildAt(0);
    int top = (v == null) ? 0 : v.getTop();
    // ...
   adap.notifyDataSetInvalidated();
    // restore
    lst.setSelectionFromTop(index, top);

2 个答案:

答案 0 :(得分:1)

我使用this库来同步下载图片。

您可以检查我的代码并根据您的项目进行调整。

class WallAdapter extends BaseAdapter {

WallInfo wallInfo;
Activity activity;
LayoutInflater inflater=null;

public WallAdapter(Activity a, WallInfo wallInfo) {
    this.activity = a;
    this.wallInfo = wallInfo;
    inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
    return wallInfo.getCount();
}

@Override
public Object getItem(int position) {
    return wallInfo.getItem(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View vi=convertView;
    if(convertView == null)
        vi = inflater.inflate(R.layout.wall_item, null);

    ImageView imagePost = (ImageView) vi.findViewById(R.id.imagePost);

    WallMessage post = wallInfo.getItem(position);

    if(post.attachments != null && post.attachments.size() != 0) {
        UrlImageViewHelper.setUrlDrawable(imagePost, post.attachments.get(0).photo.src_big);
    } else {
        imagePost.setImageBitmap(null);
    }
    return vi;
}

}

答案 1 :(得分:0)

尝试使用google volley库,它可以帮助您更快地下载。