最近自己做了些小程序玩,本来在程序中通过定义结构数组的方式放入带图标的菜单,但是后来发现每次修改菜单的话,就要修改重新编译程序,很麻烦,就开始找在XML中定义数组,然后再在程序中调用的方式,这样一劳永逸。
开始定义的数组:
private subMenuData[] mydata = new subMenuData[]{new subMenuData("唐三", "男", R.drawable.img1),new subMenuData("小舞", "女", R.drawable.img2),
new subMenuData("宁荣荣", "女", R.drawable.img3),new subMenuData("奥斯卡", "男", R.drawable.img4),
new subMenuData("马洪俊", "男", R.drawable.img5),new subMenuData("戴沐白", "女", R.drawable.img6),
new subMenuData("朱笃清", "女", R.drawable.img7)};
修改后的程序:
首先XML中的定义:
<string-array name="menuItemIconID">
<item >@drawable/img1</item>
<item >@drawable/img2</item>
<item >@drawable/img3</item>
<item >@drawable/img4</item>
<item >@drawable/img5</item>
<item >@drawable/img6</item>
<item >@drawable/img7</item>
</string-array>
JAVA中:(其中subMenuData为自定义数据结构)
TypedArray IconIDType = context.getResources().obtainTypedArray(R.array.menuItemIconID);
for(int i=0;i<Name.length;i++)
{
int IconID;
IconID = IconIDType.getResourceId(i, 0);
mydata[i] = new subMenuData(Name[i], Sex[i], IconID);
System.out.println(String.format("IconID=0x%x", IconID));
}
IconIDType.recycle();
注意TypeArray的obtainTypedArray()和recycle()要成对使用。