列表绑定后在自定义ListView中设置ImageView的源代码

时间:2014-05-20 07:46:42

标签: android listview android-listview imageview

我有一个ListView绑定自定义适配器,它的工作正常:

private class Placeslist extends ArrayAdapter<ArrayList<String>> {

    private ArrayList<ArrayList<String>> items;

    public Placeslist(Context context, int textViewResourceId,
            ArrayList<ArrayList<String>> items) {
        super(context, textViewResourceId, items);
        this.items = items;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.locationgpsrow, null);
        }
        ArrayList<String> o = items.get(position);
        if (o != null) {
                        // Binding here
                        TextView tv1 = (TextView) v.findViewById(R.id.txt1);
                        tv1.setText(o.get(0));
                        ImageView imView = (ImageView) v.findViewById(R.id.imageView1);
                        //o.get(1) // Image url e.g. http://www.some-website/image.jpg
                     }
        return v;
    }
}

我的某个数组元素中有图像源网址,我需要下载图像并将其设置为listview项目自定义布局中的 ImageView 。而且,我也有代码!

ImageView imView = (ImageView) findViewById(R.id.imageView1);
HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection();
            conn.setDoInput(true);
            conn.connect();
            is = conn.getInputStream();
            bmImg = BitmapFactory.decodeStream(is);
            is.close();

imView.setImageBitmap(Bitmap.createScaledBitmap(bmImg,width,                         身高,真));

我可以在上面的 getView()中使用它来设置imageView源代码。但我想要的是让列表视图绑定到适配器而不加载图像(因为它将是繁重的过程)。然后在加载listView之后,分别启动绑定行中的所有ImageView。他们是一种实现这个或任何可以将图像下载过程与listView绑定分开的东西的方法吗?

5 个答案:

答案 0 :(得分:1)

你必须使用下面的lib来在运行时加载图像: -

Universal loader lib

Picasso

Urlhelper

答案 1 :(得分:1)

您可以选择universalimageloader等第三方图书馆和其他图书馆。

否则,如果您想自己处理它,只需创建一个asyncTask从url下载图像并将其设置为imageView onPostExecute callBack。您可以将参数(ImageView img,String Url)传递给此AsyncTask的构造函数,在DoinBackground()中下载图像,最后将其设置为img onPostExecute();

你可以从适配器的getView()方法触发这个asyncTask,可能需要在UI线程上执行此操作。

答案 2 :(得分:1)

我使用过Picasso Image库,它可以轻松地处理缓存和下载。看看这里: http://square.github.io/picasso/

Universal Image Loader也做得很好,配置更多选项: https://github.com/nostra13/Android-Universal-Image-Loader

您可能希望使用像这样的库,因为它会保存数据,而不是做那么多的网络操作。

答案 3 :(得分:0)

使用SmartImageView将URL加载到图像。 http://loopj.com/android-smart-image-view/

答案 4 :(得分:0)

您需要阅读有关异常加载图像的listview的延迟加载。您可以使用任何可用的库。

关于listview和延迟加载的完整教程:

http://www.androidhive.info/2012/02/android-custom-listview-with-image-and-text/