1

在 Android 中,我想创建一个带有视图的枚举(比如说使用 EditTexts)。我想用 初始化一个 EditText findViewById(R.id.something),你必须在一个活动类中这样做,或者你需要这个类的一个实例。

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

我想过这样的事情,但它不会工作:

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;
    }
}

那么,你会怎么做呢?

4

1 回答 1

3

试图在枚举中存储对 anEditText或任何相关的引用View确实是行不通的。

在 Java 中,枚举本质上是一个单例,正如您所指出的,aView与它的耦合Context,这将是它的 Activity 或 Fragment。因此,拥有一个寿命很长的对象(您的枚举)引用寿命极短的对象(您的 )确实没有意义EditText

作为替代方案,您可以让您的枚举存储您的View(例如,R.id.myEditText)的 ID,然后当您想要检索实际实例时,传入您的 Activity 或 Fragment 并调用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);
    }
}
于 2013-08-15T18:51:33.430 回答