Android 导入资源中定义的对象数组
示例
在某些情况下,需要在应用程序的资源中创建和定义自定义对象。这样的对象可以由Java简单类型,例如Integer,Float,String。
这是如何导入在应用程序资源中定义的对象的示例。该对象包含Category3个类别的属性:
ID
颜色
名称
这POJO在categories.xml文件中具有等效性,其中每个数组具有为每个类别定义的相同属性。
为您的对象创建一个模型:
public class Category { private Type id; private @ColorRes int color; private @StringRes String name; public Category getId() { return id; } public void setId(Category id) { this.id= id; } public String getName() { return name; } public void setName(String name) { this.name= name; } public int getColor() { return color; } public void setColor(int color) { this.color= color; } public enum Type{ REGISTRATION, TO_ACCEPT, TO_COMPLETE, TO_VERIFY, CLOSED } }
在文件res/values夹中创建文件:
categories.xml
组成由资源组成的每个模型:
<array name="no_action"> <item>0</item> <item>@android:color/transparent</item> <item>@string/statusRegistration</item> </array> <array name="to_accept"> <item>1</item> <item>@color/light_gray</item> <item>@string/acceptance</item> </array> <array name="opened"> <item>2</item> <item>@color/material_green_500</item> <item>@string/open</item> </array> <array name="to_verify"> <item>3</item> <item>@color/material_gray_800</item> <item>@string/verification</item> </array> <array name="to_close"> <item>4</item> <item>@android:color/black</item> <item>@string/closed</item> </array>
在资源文件中定义一个数组:
<arrayname="categories">
<item>@array/no_action</item>
<item>@array/to_accept</item>
<item>@array/opened</item>
<item>@array/to_verify</item>
<item>@array/to_close</item>
</array>
创建一个函数来导入它们:
@NonNull
publicList<Category>getCategories(@NonNullContextcontext){
finalintDEFAULT_VALUE=0;
finalintID_INDEX=0;
finalintCOLOR_INDEX=1;
finalintLABEL_INDEX=2;
if(context==null){
returnCollections.emptyList();
}
//从`tasks_categories`数组中获取对象数组
TypedArraystatuses=context.getResources().obtainTypedArray(R.array.categories);
if(statuses==null){
returnCollections.emptyList();
}
List<Category>categoryList=newArrayList<>();
for(inti=0;i<statuses.length();i++){
intstatusId=statuses.getResourceId(i,DEFAULT_VALUE);
//获取一个对象的属性
TypedArrayrawStatus=context.getResources().obtainTypedArray(statusId);
Categorycategory=newCategory();
intid=rawStatus.getInteger(ID_INDEX,DEFAULT_VALUE);
Category.TypecategoryId;
//ID应该使用`Category.Type`保持顺序。
switch(id){
case0:
categoryId=Category.Type.REGISTRATION;
break;
case1:
categoryId=Category.Type.TO_ACCEPT;
break;
case2:
categoryId=Category.Type.TO_COMPLETE;
break;
case3:
categoryId=Category.Type.TO_VERIFY;
break;
case4:
categoryId =Category.Type.CLOSED;
break;
default:
categoryId=Category.Type.REGISTRATION;
break;
}
category.setId(categoryId);
category.setColor(rawStatus.getResourceId(COLOR_INDEX,DEFAULT_VALUE));
intlabelId=rawStatus.getResourceId(LABEL_INDEX,DEFAULT_VALUE);
category.setName(getString(context.getResources(),labelId));
categoryList.add(taskCategory);
}
returntaskCategoryList;
}