De l'erreur De mémoire à l'aide de Universal Chargeur d'Image et les images se rafraîchi
Je suis à l'aide de l'image universelle de chargeur pour afficher les images sous forme de vignettes dans la ListView cependant j'obtiens l'erreur de mémoire insuffisante et quand j'ai faites défiler la liste que le nouveau point de vue est d'avoir les images de la première vue lorsque la liste n'était pas sur de défilement de la scène, mais que les images sont mis à la bonne image qu'il devrait être.
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;
}
}
et voici Xml de Mise en page pour ImageView et 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>
J'ai résolu le problème de la définition de la bonne image sur listView actualiser. Plus tôt, je n'étais pas passer la variable de DisplayImageOption tout en appelant la Imageloader.displayImage(). Maintenant son travail approprié. 🙂
OriginalL'auteur Nitin Bathija | 2012-12-13
Vous devez vous connecter pour publier un commentaire.
Ensemble
.resetViewBeforeLoading()
dans DisplayImageOptions.OriginalL'auteur nostra13
essayer la prochaine (ou plusieurs):
Réduire la taille du pool de threads dans la configuration (.threadPoolSize(...)). 1 - 5 est recommandé.
Utilisation
dans les options d'affichage. Les Bitmaps dans RGB_565 consommer 2 fois moins de mémoire que dans ARGB_8888.
Utilisation
dans la configuration ou de désactiver la mise en cache dans la mémoire à tout
dans les options d'affichage (ne pas l'appeler .cacheInMemory()).
Utilisation
dans les options d'affichage. Ou essayez
Éviter d'utiliser RoundedBitmapDisplayer. Il crée un nouvel objet Bitmap avec ARGB_8888 config pour l'affichage pendant le travail.
OriginalL'auteur Akbar Rezaee
assurez-vous de faire la taille de l'Image en tant que besoin dans Votre ImageLoader
OriginalL'auteur Ankitkumar Makwana