如何以一种很好的方式从UI元素创建对象?

时间:2012-05-27 21:45:15

标签: android design-patterns software-design

在我的Android应用程序中,我有一些字段,如

MyButton a;
MyEditText b;
MySpinner c;
MyTextView d;

其中每一项都像public class MyButton extends Button implements InfoExtract

public interface InfoExtract{
    String getTheText();
}

在这些字段中(用户可以更改其中一些字段),可以像这样创建一个UserProfile:

public class ProfileUpdate {
    // The fields have to be string no matter what
    String firstName;
    String lastName;
    String dateOfBirth;
    String relationshipStatus
}

执行流程如下:

List<InfoExtract> uiElements = new ArrayList<InfoExtract>();
uiElements.add(a);
uiElements.add(b);
uiElements.add(c);
uiElements.add(d);
someButton.setOnClickListener(new SaveProfileListener(uiElements);

SaveProfileListener或多或少会这样做:

ProfileUpdate pup = new ProfileUpdate();
int i = 0;
pup.firstName = uiElements.get(i++).getTheText()
pup.lastName = uiElements.get(i++).getTheText();
pup.dateOfBirth = uiElements.get(i++).getTheText();
pup.relationshipStatus = uiElements.get(i++).getTheText();

糟糕的事情#1:如果我想添加其他字段,那么显然会有很多工作。

不好的事情#2:列表中元素的顺序非常重要。

不好的事情#3:例如,我无法轻易操纵dateOfBirth的日期格式。

我能做什么,但同样糟糕的是:

// Pass the listener what fields it should use.
someButton.setOnClickListener(new SaveProfileListener(a, b, c, d);

如何让它变得干净整洁?

1 个答案:

答案 0 :(得分:0)

我最终为每个字段使用了Map和一个新的枚举类型。