Android视图枚举

时间:2013-08-15 18:32:12

标签: java android enums

在Android中,我想用视图制作一个枚举(比方说EditTexts)。 我想用findViewById(R.id.something)初始化一个EditText,你必须在一个activity-class中这样做,或者你需要一个这个类的实例。

那么如何在枚举中初始化EditTexts或者我可以从主类中设置Views?

我想过这样的事情,但它不起作用:

enum Edits {
    one(/* what to write here */), two(/* what to write here */);

    private EditText editText;

    Edits(EditText editText){
        this.editText = editText;
    }

    EditText getEditText(){
        return this.editText;
    }

    void setEditText(EditText editText){ // Maybe something like this?
        this.editText = editText;
    }
}

那么,你会怎么做?

1 个答案:

答案 0 :(得分:3)

尝试在枚举中存储对EditText或任何View的引用确实不起作用。

在Java中,枚举本质上是一个单例,正如您所指出的,ViewContext耦合,它将是它的Activity或Fragment。因此,拥有一个寿命很长的对象(你的枚举)非常短暂的对象(你的EditText)真的没有意义。

作为替代方案,您可以让您的枚举存储View的ID(例如R.id.myEditText),然后当您想要检索实际实例时,传入您的活动或片段,调用findViewById()来获取实际实例。

示例:

enum Edits {
    one(R.id.field1), two(R.id.field2);

    private int editTextId;

    Edits(int editTextId) {
        this.editTextId = editTextId;
    }

    EditText getEditText(Activity activity){
        return (EditText)activity.findViewById(editTextId);
    }
}