Aller au contenu

Gestion des Map


TheGrintch

Recommended Posts

Bonjour à tous,

Pour des besoin d'animation, je dois regrouper des views, au seins d'une map.

private Map<ImageView, List<View>> mListView = new TreeMap<ImageView, List<View>>();

Seulement, lors de la première insertion tout ce passe bien, mais lors de la seconde, j'ai une exception qui se déclenche (java.lang.ClassCastException: android.widget.ImageView):

View imageView1 = findViewById(R.id.imageView1);
this.mListView.put((ImageView)imageView1, null);

List<View> arrView = new ArrayList<View>();
arrView.add(findViewById(R.id.bouton1));

View imageView2 = findViewById(R.id.imageView2);
this.mListView.put((ImageView)imageView2, arrView);

Juste pour préciser, imageView2 n'est pas null lors de l'insertion (Vérification en debug).

Est-ce que vous avez une idée, sur ce problème ?

Merci.

Lien vers le commentaire
Partager sur d’autres sites

Voici le XML, en trois parties:

Main.xml:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/conteneur"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<include android:id="@+id/notelist" layout="@layout/premier_ecran"/>
<include android:id="@+id/notelist" layout="@layout/deuxieme_ecran"/>	
</FrameLayout>

premier_ecran.xml:

<RelativeLayout android:id="@+id/premier_ecran_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView
	android:id="@+id/imageView1"
	android:layout_centerHorizontal="true"
	android:layout_centerVertical="true"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:src="@drawable/image1"/>
</RelativeLayout>

deuxieme_ecran.xml:

<RelativeLayout android:id="@+id/deuxieme_ecran_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<RelativeLayout
		android:layout_centerHorizontal="true"
		android:layout_centerVertical="true"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content">
	<ImageView
		android:id="@+id/imageView2"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:src="@drawable/image2"/>
	<Button
		android:id="@+id/bouton1"
		android:layout_marginLeft="20dip"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:text="Test"/>
</RelativeLayout>
</RelativeLayout>

Lien vers le commentaire
Partager sur d’autres sites

Alors, le logcat n'est pas explicite:

logcat:

01-25 12:22:59.313: DEBUG/dalvikvm(17531): threadid=1: still suspended after undo (sc=1 dc=1 s=Y)
01-25 12:23:03.391: DEBUG/dalvikvm(17531): GC_EXTERNAL_ALLOC freed 701 objects / 57120 bytes in 77ms
01-25 12:23:05.270: DEBUG/dalvikvm(3032): GC_EXPLICIT freed 617 objects / 37536 bytes in 153ms
01-25 12:23:06.324: WARN/ActivityManager(2948): Activity idle timeout for HistoryRecord{48de4008 android.flip.test/.Flip3d}

Et pour la ligne qui retourne l'exception c'est:

this.mListView.put((ImageView)imageView2, arrView);

Lien vers le commentaire
Partager sur d’autres sites

Effectivement, le logcat n'aide pas...

D'après la ligne de code, c'est donc qu'il n'arrive pas à caster imageView2 en une ImageView. Puisque tu vois au debugger que imageView2 n'est pas null, tu peux aussi voir le type réel de l'instance. Est-ce bien un objet de type ImageView ???

Lien vers le commentaire
Partager sur d’autres sites

Oui, c'est bien une ImageView :)

J'ai testé ce petit bout de code:

       ImageView tmp1 = new ImageView(this);
       ImageView tmp2 = new ImageView(this);
       ImageView tmp3 = new ImageView(this);
       ImageView tmp4 = new ImageView(this);

       this.mListView.put(tmp1, null);
       this.mListView.put(tmp2, null); //Exception thrown
       this.mListView.put(tmp3, null);
       this.mListView.put(tmp4, null);

Mais ça fait la même chose que sur mon code. à la deuxième ligne, exception.

Une idée ?

Lien vers le commentaire
Partager sur d’autres sites

J'ai résolu mon problème:

utilisé une hashMap à la place d'une TreeMap:

       //Map<ImageView, List<View>> mList  = new TreeMap<ImageView, List<View>>();
       Map<ImageView, List<View>> mList  = new HashMap<ImageView, List<View>>();

PS: Je ne peux pas mettre résolu tout seul.

En tout cas merci d'avoir pris du temps pour me répondre ^^

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...