在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;
}
}
那么,你会怎么做?
答案 0 :(得分:3)
尝试在枚举中存储对EditText
或任何View
的引用确实不起作用。
在Java中,枚举本质上是一个单例,正如您所指出的,View
与Context
耦合,它将是它的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);
}
}