Intereting Posts
Есть ли хорошие ORM (желательно JPA-реализации), поддерживающие SQLite (на Android)? OnNext начать другое наблюдение Как изменить цвет текста кнопки Android в глобальном масштабе в теме Как я могу проверить использование памяти в объекте в java Как получить масштабированный Bitmap из ImageView Как синхронизировать проекты с GitHub с Android Studio? Как получить сцену в центре в libgdx? Ошибка установки Google Play -505 Где находится файл, созданный Кордовым файловым плагином? Как преобразовать изображение в массив байтов и массив байтов в base64 String в android? Простая проблема с выходом файла Android Как предварительно загружать рекламное объявление AdMob и отправлять другим мероприятиям андроида с использованием намерений Почему два разных приложения, использующих aviary sdk, не установлены на одном устройстве? Упреждающий базовый аут с HttpUrlConnection? Android ACTION_MEDIA_SCANNER_SCAN_FILE не показывает изображение до перезагрузки?

Ошибка из памяти с помощью универсального загрузчика изображений и изображений, обновленных

Я использую универсальный загрузчик изображений для отображения изображений в виде эскиза в ListView, но я получаю ошибку из памяти и когда я просматриваю список, а новый вид имеет изображения первого вида, когда список не находился на этапе прокрутки, но Чем изображения будут установлены на правильное изображение, которое должно быть.

public class NewAdapter extends BaseAdapter { private Activity activity; private ArrayList<String> movieThumbnail; private ArrayList<String> movieText; private static LayoutInflater inflater=null; static File cacheDir; ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(activity) .memoryCache(new WeakMemoryCache()) .denyCacheImageMultipleSizesInMemory() .discCache(new UnlimitedDiscCache(cacheDir)) .threadPoolSize(5) .imageDownloader(new URLConnectionImageDownloader(120 * 1000, 120 * 1000)) .enableLogging() .build(); DisplayImageOptions options = new DisplayImageOptions.Builder() .cacheOnDisc() .cacheInMemory() .bitmapConfig(Bitmap.Config.RGB_565) .imageScaleType(ImageScaleType.IN_SAMPLE_INT) .build(); private ImageLoader imageLoader= ImageLoader.getInstance(); public NewAdapter(Activity a, ArrayList<String> movieThumbnail, ArrayList<String> movieText) { activity = a; /*data=d;*/ this.movieThumbnail = movieThumbnail; this.movieText = movieText; inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) cacheDir=new File(android.os.Environment.getExternalStorageDirectory(),"JunkFolder"); else cacheDir=activity.getCacheDir(); if(!cacheDir.exists()) cacheDir.mkdirs(); imageLoader.init(config); } public int getCount() { return movieText.size(); } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { View vi=convertView; if(convertView==null) vi = inflater.inflate(R.layout.listrow, null); TextView text=(TextView)vi.findViewById(R.id.rowListTextView); ImageView image=(ImageView)vi.findViewById(R.id.movieImage); text.setText(movieText.get(position)); imageLoader.displayImage(movieThumbnail.get(position), image, options); return vi; } } 

И вот Xml Layout для ImageView и TextView

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/text_relativelayout" android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/latest_list_toggle" /> <ImageView android:id="@+id/movieImage" android:layout_width="40dp" android:layout_height="40dp" android:layout_marginLeft="12dp" android:layout_marginTop="14dp" /> <TextView android:id="@+id/rowListTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@+id/movieImage" android:paddingBottom="10dp" android:paddingLeft="10dp" android:paddingRight="21dp" android:paddingTop="20dp" android:text="@string/app_name" android:textColor="@android:color/black" android:textSize="17sp" android:textStyle="bold" /> </RelativeLayout> 

Установите .resetViewBeforeLoading() в DisplayImageOptions.

Попробуйте следующий (все или несколько):

Уменьшите размер пула потоков в конфигурации (.threadPoolSize (…)). Рекомендуется 1 – 5. использование

  .bitmapConfig(Bitmap.Config.RGB_565) 

В параметрах отображения. Растровые изображения в RGB_565 потребляют в 2 раза меньше памяти, чем в ARGB_8888. использование

 .memoryCache(new WeakMemoryCache()) 

В конфигурации или отключить кэширование в памяти вообще в параметрах отображения (не вызывать .cacheInMemory ()). использование

 .imageScaleType(ImageScaleType.IN_SAMPLE_INT) 

В параметрах отображения. Или попробуйте

 .imageScaleType(ImageScaleType.EXACTLY). 

Избегайте использования RoundedBitmapDisplayer. Он создает новый объект Bitmap с конфигурацией ARGB_8888 для отображения во время работы.

Убедитесь, что вы задали размер изображения по требованию в ImageLoader

 // decodes image and scales it to reduce memory consumption private Bitmap decodeFile(File f) { try { // decode image size BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; BitmapFactory.decodeStream(new FileInputStream(f), null, o); // Find the correct scale value. It should be the power of 2. final int REQUIRED_SIZE = 70; int width_tmp = o.outWidth, height_tmp = o.outHeight; int scale = 1; while (true) { if (width_tmp / 2 < REQUIRED_SIZE || height_tmp / 2 < REQUIRED_SIZE) break; width_tmp /= 2; height_tmp /= 2; scale *= 2; } // decode with inSampleSize BitmapFactory.Options o2 = new BitmapFactory.Options(); o2.inSampleSize = scale; return BitmapFactory.decodeStream(new FileInputStream(f), null, o2); } catch (FileNotFoundException e) { } return null; }