Modification d'une ImageView au sein d'une ListView
Bonjour,
J'ouvre un second sujet pour un deuxième problème qui commence à me rendre un peu fou ^^;
Le contexte est :
- J'ai une Activity qui contient un ListView
- Ce ListView est initialisé à l'aide d'un ArrayAdapter personnalisé
- Chaque élément de la liste comportant une photo téléchargée sur internet, il est un peu long à afficher (100-150 éléments en moyenne) donc je souhaite les afficher avec une photo par défaut et ensuite, au sein d'une tâche asynchrone, télécharger les photos petit à petit et les mettre à jour dans la liste
Element de la liste
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:orientation="horizontal" >
<ImageView
android:id="@+id/iBrPhoto"
android:layout_width="65dp"
android:layout_height="40dp"
android:scaleType="fitXY"
android:layout_marginRight="15dp"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_height="22dp"
android:gravity="center_vertical"
android:textAppearance="@style/lv_chann_br_item_title" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="18dp"
android:orientation="horizontal" >
<TextView
android:id="@+id/tvHour"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:textAppearance="@style/lv_chann_br_item" />
<TextView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:textAppearance="@style/lv_chann_br_item"
android:text=" - " />
<TextView
android:id="@+id/tvType"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:textAppearance="@style/lv_chann_br_item" />
<TextView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:textAppearance="@style/lv_chann_br_item"
android:text=" - " />
<TextView
android:id="@+id/tvChannel"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:textAppearance="@style/lv_chann_br_item" />
</LinearLayout>
</LinearLayout>
</LinearLayout> |
Ma tâche Asynchrone
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
private class DownloadPhotoTask extends AsyncTask<Integer, Void, Bitmap> {
LinearLayout brView;
ImageView iv;
@Override
protected Bitmap doInBackground(Integer... params) {
Bitmap ret = null;
for (Integer index : params) {
View v = broadcastsListView.getChildAt(Integer.parseInt(index.toString()));
if (v == null) {
brView = new LinearLayout(getApplicationContext());
String inflater = Context.LAYOUT_INFLATER_SERVICE;
LayoutInflater vi = (LayoutInflater)getApplicationContext().getSystemService(inflater);
vi.inflate(R.layout.videos_broadcast_item, brView, true);
}
else {
brView = (LinearLayout)v;
}
ret = ImageUtils.LoadBitmap(ImageUtils.GetImageUrl(broadcasts.get(index).getPhotoId()), getApplicationContext());
}
return ret;
}
@Override
protected void onPostExecute(Bitmap bmp) {
iv = (ImageView)brView.findViewById(R.id.iBrPhoto);
Drawable[] layers = new Drawable[2];
layers[0] = new BitmapDrawable(bmp);
layers[1] = getApplicationContext().getResources().getDrawable(R.drawable.play_big);
layers[1].setBounds(10, 10, 10, 10);
LayerDrawable layerDraw = new LayerDrawable(layers);
iv.setImageDrawable(layerDraw);
}
} |
Le problème est que le téléchargement s'effectue bien... La mise à jour se fait sans soucis (j'ai testé sur les 10 premiers éléments)...
MAIS !
Quand je scrolle vers le bas, et que je remonte, les images ont disparues... et voila le noeud du problème >_<
j'ai essayé de rajouter aaBr.notifyDataSetChanged(); à la fin de mon onPostExecute, mais ça se contente de ne rien m'afficher du tout...
Je remercie par avance toute personne capable et voulant bien m'aider ^^