2010-05-28 6 views
1

Est-il possible de placer une icône personnalisée pour chaque élément de groupe? Comme pour le téléphone je voudrais placer un téléphone, pour le logement je voudrais placer une maison. Voici mon code, mais il continue à lancer un avertissement et se bloque sur moi.Android - Icônes personnalisées dans ListView

ListView myList = (ListView) findViewById(R.id.myList); 
       //ExpandableListAdapter adapter = new MyExpandableListAdapter(data); 
       List<Map<String, Object>> groupData = new ArrayList<Map<String, Object>>(); 
       // List<List<Map<String, Object>>> childData = new ArrayList<List<Map<String, String>>>(); 

       Iterator it = data.entrySet().iterator(); 
       while (it.hasNext()) 
       { 
        //Get the key name and value for it 
        Map.Entry pair = (Map.Entry)it.next(); 
        String keyName = (String) pair.getKey(); 
        String value = pair.getValue().toString(); 

        //Add the parents -- aka main categories 
        Map<String, Object> curGroupMap = new HashMap<String, Object>(); 
        groupData.add(curGroupMap); 
        Log.i("VAL", keyName); 
        if (keyName.equalsIgnoreCase("Phone")) 
         curGroupMap.put("ICON", findViewById(R.drawable.phone_icon)); 
        else if (keyName.equalsIgnoreCase("Housing")) 
         curGroupMap.put("ICON", findViewById(R.drawable.house_icon)); 
        else 
         curGroupMap.put("ICON", findViewById(R.drawable.house_icon)); 

        curGroupMap.put("NAME", keyName); 
        curGroupMap.put("VALUE", value); 


       } 

       // Set up our adapter 
       mAdapter = new SimpleAdapter(
         mContext, 
         groupData, 
         R.layout.exp_list_parent, 
         new String[] { "ICON", "NAME", "VALUE" }, 
         new int[] { R.id.photoAlbumImg, R.id.rowText1, R.id.rowText2 } 
         ); 

       myList.setAdapter(mAdapter); 

L'erreur que je reçois:

05-28 17:36:21.738: WARN/System.err(494): java.io.IOException: Is a directory 
05-28 17:36:21.809: WARN/System.err(494):  at org.apache.harmony.luni.platform.OSFileSystem.readImpl(Native Method) 
05-28 17:36:21.838: WARN/System.err(494):  at org.apache.harmony.luni.platform.OSFileSystem.read(OSFileSystem.java:158) 
05-28 17:36:21.851: WARN/System.err(494):  at java.io.FileInputStream.read(FileInputStream.java:319) 
05-28 17:36:21.879: WARN/System.err(494):  at java.io.BufferedInputStream.fillbuf(BufferedInputStream.java:183) 
05-28 17:36:21.908: WARN/System.err(494):  at java.io.BufferedInputStream.read(BufferedInputStream.java:346) 
05-28 17:36:21.918: WARN/System.err(494):  at android.graphics.BitmapFactory.nativeDecodeStream(Native Method) 
05-28 17:36:21.937: WARN/System.err(494):  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:459) 
05-28 17:36:21.948: WARN/System.err(494):  at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:271) 
05-28 17:36:21.958: WARN/System.err(494):  at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:296) 
05-28 17:36:21.978: WARN/System.err(494):  at android.graphics.drawable.Drawable.createFromPath(Drawable.java:801) 
05-28 17:36:21.988: WARN/System.err(494):  at android.widget.ImageView.resolveUri(ImageView.java:501) 
05-28 17:36:21.998: WARN/System.err(494):  at android.widget.ImageView.setImageURI(ImageView.java:289) 

Merci d'avance pour votre aide !!

Répondre

2
if (value == "Phone") 

Vous devez utiliser equals pour comparer des chaînes. Très probablement votre code pour définir le drawable n'est donc jamais exécuté, puis le simpleadapter essaie de charger votre chaîne en tant que fichier, et vous obtenez votre erreur bizarre.

+0

Je fixe cela, mais je suis toujours la même erreur rencontre avec le code est le suivant: \t \t \t si (keyName.equalsIgnoreCase ("Téléphone")) \t \t \t \t curGroupMap.put ("ICON", (ImageView) findViewById (R.drawable.phone_icon)); \t \t \t else if (keyName.equalsIgnoreCase ("Logement")) \t \t \t \t curGroupMap.put ("ICON", (ImageView) findViewById (R.drawable.house_icon)); \t \t \t autre \t \t \t \t curGroupMap.put ("ICON", (ImageView) findViewById (R.drawable.house_icon)); – Ryan

+0

@Ryan: la deuxième partie de votre commentaire contredit directement la première partie. – JRL

+0

Excuses, j'ai modifié mon code ci-dessus pour refléter ce à quoi il ressemble actuellement. Merci d'avoir pris le temps de m'aider. C'est grandement apprécié! – Ryan

0

Un problème est que vous ne devriez pas comparer les valeurs de chaîne avec l'opérateur ==, utilisez plutôt la fonction .equals. == demande si les deux valeurs pointent vers le même objet. .equals demande si les deux objets sont fonctionnellement équivalents, c'est-à-dire ont-ils la même valeur de chaîne.

Aussi, je ne suis pas sûr de ce que vous essayez de faire avec ceci:

else if (value == "Housing") 
curGroupMap.put("NAME", keyName); 
curGroupMap.put("VALUE", value); 

Il a pour effet, si celle-ci:

else if (value == "Housing") { 
    curGroupMap.put("NAME", keyName); 
} 
curGroupMap.put("VALUE", value); 

Je doute que est ce que vous vouliez? Il est considéré comme bon de toujours utiliser le {}, même s'il n'y a qu'une seule ligne dans l'instruction if pour ne pas rencontrer de problèmes comme celui-ci. En ce qui concerne le message d'erreur, est-ce vraiment ce qui est dit? "Est un directeur"? Il semble que vous ayez du mal à lire votre image ... Est-il en quelque sorte corrompu, ou mal configuré dans votre fichier drawable?