我有一个称为expenseType的对象模型:
public class ExpenseType {
private String gridText;
public enum type {
FOOD(Constants.EXPENSE_TYPE_FOOD, R.drawable.food_blue, R.drawable.food),
FLOWERS(Constants.EXPENSE_TYPE_FLOWERS, R.drawable.flowers_blue, R.drawable.flowers),
GROCERIES(Constants.EXPENSE_TYPE_GROCERIES, R.drawable.groceries_blue, R.drawable.groceries),
HOLIDAY(Constants.EXPENSE_TYPE_HOLIDAY, R.drawable.holiday_blue, R.drawable.holiday),
PHARMACY(Constants.EXPENSE_TYPE_PHARMACY, R.drawable.pharmacy_blue, R.drawable.pharmacy),
BILLS(Constants.EXPENSE_TYPE_BILLS, R.drawable.bills_blue, R.drawable.bills),
CLOTHES(Constants.EXPENSE_TYPE_CLOTHES, R.drawable.clothes_blue, R.drawable.clothes),
TRANSPORT(Constants.EXPENSE_TYPE_TRANSPORT, R.drawable.transport_blue, R.drawable.transport),
ITEMS(Constants.EXPENSE_TYPE_ITEMS, R.drawable.items_blue, R.drawable.items),
OTHERS(Constants.EXPENSE_TYPE_OTHERS, R.drawable.others_blue, R.drawable.others);
private String expenseKey;
private int drawableBlue, drawableWhite;
type(String expenseKey, @DrawableRes int drawableBlue, @DrawableRes int drawableWhite) {
this.expenseKey = expenseKey;
this.drawableBlue = drawableBlue;
this.drawableWhite = drawableWhite;
}
public String getKey() {
return expenseKey;
}
public int getDrawableBlue() {
return drawableBlue;
}
public int getDrawableWhite() {
return drawableWhite;
}
}
public ExpenseType(String gridText) {
this.gridText = gridText;
}
public String getGridText() {
return gridText;
}
public void setGridText(String gridText) {
this.gridText = gridText;
}
}
字符串gridText被写入数据库内部,但是我也不想将可绘制的值添加到数据库中,因此我创建了具有可绘制变化的枚举。现在,在回收视图适配器中,如何从枚举中访问getDrawableBlue(),以便可以设置与我的costumType对应的图标?
我在适配器中有以下代码:
private void checkSelect(ExpenseType expenseType) {
if(positionSelected == getAdapterPosition()){
gridIcon.setImageResource(????????);
return;
}
如何访问该吸气剂而不是????????这样我就可以将我的可绘制值存储在该枚举中?
最佳答案
在您的班级设计中,这看起来像是一个小故障。
枚举type
是ExpenseType
类中的嵌套类。
(注意:因为它是一个枚举,所以它隐式为static
嵌套类型)。
为了使您能够调用type
的访问器,您将需要以某种方式引用其特定类型。
一种方法是将type
作为ExpenseType
的实例字段,非常类似于String gridText
。
然后,您需要将特定的type
类型绑定到您的ExpenseType
实例(我知道,这在语义上会造成混淆,但是我没有给您的变量命名:)。
换句话说,每个ExpenseType
实例都有其自己的type
字段,并为其分配了一种... errr .. type
类型。
因此,ExpenseType
的实例1的FOOD
值为type
,ExpenseType
的实例2的FLOWERS
值为type
,依此类推。
然后,您可以调用以下命令添加一个吸气剂并引用drawableBlue int
中的checkSelect
:
// assuming field type can't be null
expenseType.getType().getDrawableBlue()