聊天列表视图停止刷新图像视图

时间:2014-09-26 14:24:29

标签: java android listview imageview lazy-loading

所以问题是 1.我们正在使用listView进行聊天应用 2。每次发送聊天或rec时,我们都会更新arrayList并更新适配器并使用notifydatasetAdaper()来刷新列表视图。 3.因此,如果我们在聊天中发送10张图像,然后发送第11个聊天消息(比如文字chtat)然后调用notifydatasetadapter(),在这种情况下,所有10个图像都是刷新的。 所以我需要停止这种令人耳目一新的图像。 5.必须刷新ListView而不刷新图像

所以任何想法我怎么能实现这个...或者可能是在错误的道路上请告诉我正确的做法..... !!!

我也试过使用picaso但是这个库与okhttp库有冲突.... !!!

这也是我展示图片的方式

public class ImageFromSd extends AsyncTask<Object, Bitmap, Bitmap> {

        ImageView im;

        // int targetWidth = 200;
        // int targetHeight = 200;

        @Override
        protected Bitmap doInBackground(Object... params) {
            // TODO Auto-generated method stub
            Bitmap bitmap = null;
            try {
                im = (ImageView) params[0];
                String path = (String) im.getTag();

                Log.d("ankit", "image path :::::" + path);
                bitmap = BitmapFactory.decodeFile(path);

                // bitmap.compress(CompressFormat.JPEG, 100, new
                // FileOutputStream(
                // path));
                //
                // bitmap = Bitmap.createScaledBitmap(bitmap, targetWidth,
                // targetHeight, false);
            }
            // catch (FileNotFoundException e) {
            // e.printStackTrace();
            // bitmap = null;
            // }
            catch (OutOfMemoryError e) {
                e.printStackTrace();
                bitmap = null;
            } catch (NullPointerException e) {
                e.printStackTrace();
                bitmap = null;
            } catch (Exception e) {
                e.printStackTrace();
                bitmap = null;
            }

            return bitmap;
        }

        @Override
        protected void onPostExecute(Bitmap result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);

            if (result != null) {
                im.setScaleType(ScaleType.FIT_CENTER);
                im.setImageBitmap(result);

            }
        }

    }


and then calling it like this 
    im.setTag(items.get(i).getTextChat());
    new ImageFromSd().execute(im);

2 个答案:

答案 0 :(得分:0)

首先,您必须刷新listview作为listview中的任何数据更新。

Secondly, the method you using for loading image is not good.

try this library to load remote or local image. it maintains cache automatically and very efficient for image loading.

Universal Image Loader
https://github.com/nostra13/Android-Universal-Image-Loader

答案 1 :(得分:0)

  • 我没有检查位图是否已缓存。
  • 每次将imageView传递给AsynTask时,我都会从路径中解码。这是错的。
  • 我对LRUCache或DiskCache进行了调整,并将位图存储在缓存中,并将路径作为密钥。

http://developer.android.com/reference/android/util/LruCache.html

http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html