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


如何访问该吸气剂而不是????????这样我就可以将我的可绘制值存储在该枚举中?

最佳答案

在您的班级设计中,这看起来像是一个小故障。

枚举typeExpenseType类中的嵌套类。
(注意:因为它是一个枚举,所以它隐式为static嵌套类型)。

为了使您能够调用type的访问器,您将需要以某种方式引用其特定类型。

一种方法是将type作为ExpenseType的实例字段,非常类似于String gridText

然后,您需要将特定的type类型绑定到您的ExpenseType实例(我知道,这在语义上会造成混淆,但是我没有给您的变量命名:)。

换句话说,每个ExpenseType实例都有其自己的type字段,并为其分配了一种... errr .. type类型。

因此,ExpenseType的实例1的FOOD值为typeExpenseType的实例2的FLOWERS值为type,依此类推。

然后,您可以调用以下命令添加一个吸气剂并引用drawableBlue int中的checkSelect

// assuming field type can't be null
expenseType.getType().getDrawableBlue()

08-05 13:29