有没有办法为每个组项目设置自定义图标?喜欢电话,我想打电话,住房我想放房子。这是我的代码,但它不断发出警告并锁定我。
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)
先谢谢你的帮助!!
答案 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语句中只有一行,所以你总是使用{}被认为是好的风格,所以你不会遇到这样的问题。
至于错误信息,是真的说的是什么? “是一个目录”?看起来它很难读取你的图像......它是否在你的可绘制文件中有点腐败或配置错误?