如何在循环中引用typedArray中的单个元素?

时间:2015-01-12 13:33:44

标签: android typed-arrays

我有一个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);
    }
}

2 个答案:

答案 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()并且之后不要访问类型化数组。要考虑的其他事项,您是否需要将这些数组和类型化数组图标存储为类成员?您只需要在该方法范围内访问它们,如果您在创建列表后不需要它们,那么您可以将它们更改为局部变量而不是类成员。