我有一个typedArray
,其中包含我想在listview中使用的图标。当我尝试引用for循环this.navDrawerIcons
中typedArray中包含的元素时,如下所示,eclipse给出了错误好像不应该像普通数组一样引用typedArray。
如何从循环
中逐个元素引用typedArray元素码
private void initViews() {
// TODO Auto-generated method stub
setContentView(R.layout.activity_main);
this.navDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
this.drawerListView = (ListView) findViewById(R.id.drawerListView);
this.navDrawerOptions = getResources().getStringArray(R.array.nav_drawer_items);
this.navDrawerIcons = getResources().obtainTypedArray(R.array.nav_drawer_icons);
this.navDrawerOptionDescription =
getResources().getStringArray(R.array.nav_drawer_items_descriptions);
this.navDrawerArrayList = new ArrayList<NavDrawerItemDesign>();
setNavDrawerArrayList(this.navDrawerArrayList);
for (int i = 0; i < this.navDrawerOptions.length; i++) {
changeSingleOptionContents(this.navDrawerOptions[i], this.navDrawerIcons[i], this.navDrawerOptionDescription[i],VISIBLE);
}
}
答案 0 :(得分:2)
使用this.navDrawerIcons.getResourceId(i, -1)
,其中i
是元素的编号,-1
是图像不存在时返回的默认值。
答案 1 :(得分:2)
obtainTypedArray
会返回另一个TypedArray
。您无法像常规数组一样访问其中的元素。因此,如果您的R.array.nav_drawer_icons
是包含每个索引处的资源ID的数组,则使用this.navDrawerIcons.getResourceId(i, <some default resource you want to show if there is nothing at index i>)
或者如果您有一个drawable数组(即@drawable\R.drawable.something
),请使用this.navDrawerIcons.getDrawable(i)
。
另外,作为附注,请记住在循环之后执行this.navDrawerIcons.recycle()
并且之后不要访问类型化数组。要考虑的其他事项,您是否需要将这些数组和类型化数组图标存储为类成员?您只需要在该方法范围内访问它们,如果您在创建列表后不需要它们,那么您可以将它们更改为局部变量而不是类成员。