Android - ListView中的自定义图标

时间:2010-05-28 17:40:34

标签: android listview icons

有没有办法为每个组项目设置自定义图标?喜欢电话,我想打电话,住房我想放房子。这是我的代码,但它不断发出警告并锁定我。

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);

我得到的错误:

    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)

先谢谢你的帮助!!

2 个答案:

答案 0 :(得分:2)

if (value == "Phone")

您需要使用equals来比较字符串。因此,设置drawable的代码很可能永远不会被执行,然后simpleadapter会尝试将您的字符串作为文件加载,并且您会收到奇怪的错误。

答案 1 :(得分:0)

一个问题是你不应该将字符串值与==运算符进行比较,而应使用.equals函数。 ==询问两个值是否指向同一个对象。 .equals询问这两个对象是否在功能上是等价的,即它们是否具有相同的字符串值。

另外,我不确定你要对此做些什么:

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

如果有这样的效果:

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

我怀疑那是你的意图吗?即使if语句中只有一行,所以你总是使用{}被认为是好的风格,所以你不会遇到这样的问题。

至于错误信息,是真的说的是什么? “是一个目录”?看起来它很难读取你的图像......它是否在你的可绘制文件中有点腐败或配置错误?