导入资源中定义的对象数组
在某些情况下,需要在应用程序的资源中创建和定义自定义对象。这些对象可以由 Java
简单类型组成,例如 Integer
,Float
,String
。
以下是如何导入应用程序资源中定义的对象的示例。对象 Category
包含 3 个属性:
- 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>
-
在资源文件中定义一个数组:
<array name="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 public List<Category> getCategories(@NonNull Context context) { final int DEFAULT_VALUE = 0; final int ID_INDEX = 0; final int COLOR_INDEX = 1; final int LABEL_INDEX = 2; if (context == null) { return Collections.emptyList(); } // Get the array of objects from the `tasks_categories` array TypedArray statuses = context.getResources().obtainTypedArray(R.array.categories); if (statuses == null) { return Collections.emptyList(); } List<Category> categoryList = new ArrayList<>(); for (int i = 0; i < statuses.length(); i++) { int statusId = statuses.getResourceId(i, DEFAULT_VALUE); // Get the properties of one object TypedArray rawStatus = context.getResources().obtainTypedArray(statusId); Category category = new Category(); int id = rawStatus.getInteger(ID_INDEX, DEFAULT_VALUE); Category.Type categoryId; //The ID's should maintain the order with `Category.Type` switch (id) { case 0: categoryId = Category.Type.REGISTRATION; break; case 1: categoryId = Category.Type.TO_ACCEPT; break; case 2: categoryId = Category.Type.TO_COMPLETE; break; case 3: categoryId = Category.Type.TO_VERIFY; break; case 4: categoryId = Category.Type.CLOSED; break; default: categoryId = Category.Type.REGISTRATION; break; } category.setId(categoryId); category.setColor(rawStatus.getResourceId(COLOR_INDEX, DEFAULT_VALUE)); int labelId = rawStatus.getResourceId(LABEL_INDEX, DEFAULT_VALUE); category.setName(getString(context.getResources(), labelId)); categoryList.add(taskCategory); } return taskCategoryList; }