使用具有有限值集的String类属性的最有效方法

时间:2014-03-12 16:29:14

标签: java android string oop

Android应用中的 ,但问题可能也适用于Java / OOP。

在我的应用程序中,我有一个Job类,它代表了一个供用户完成的工作。其中一个属性是status,它只能有三个值:'要完成','待定'或者'已完成'。

我想允许将应用翻译成其他语言,因此我一直使用Android中的string-array资源类型存储这些值:

<string-array name="jobs_statuses">
    <item>To be done</item>
    <item>Pending</item>
    <item>Completed</item>
</string-array>

我希望能够使用代码中的status属性进行比较,例如:

if (myJob.getStatus() == Job.STATUS_COMPLETED) // Do something

我考虑过将属性作为int或其他数字类型存储在类中,并在类中声明三个常量,如下所示:

public static final int STATUS_TO_BE_DONE = 1;
public static final int STATUS_PENDING = 2;

这样可以在我的代码中轻松确定给定作业的状态,但是,如何获取字符串值以便在我的UI中使用?我考虑过使用单独的getStatusString方法,可以这样使用:

myJob.getStatus(); // returns 1
myJob.getStatusString(); // returns localised string for 'To be done' status

因此,简而言之,我希望能够:

  • 使用此属性进行比较
  • 获取此属性的字符串值,该值根据用户的设备语言进行本地化(以XML格式存储的本地化字符串)

我错过了一个明显的解决方案吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

正如Dave Newton已经建议的那样,我会做这样的事情:

enum Status {

    TO_BE_DONE(R.string.to_be_done),
    PENDING(R.string.pending),
    COMPLETED(R.string.completed);

    private final int mStringResource;

    private Status(final int stringResource) {
        mStringResource = stringResource;
    }

    public String asString(final Context context) {
        return context.getString(mStringResource);
    }

}

允许您使用==进行比较,以及获取本地化的StringasString()方法。

答案 1 :(得分:0)

这可能不是您问题标题的确切答案,但如果您正在寻找并轻松翻译不同语言的应用,Google确实会为此提供服务。 http://developer.android.com/distribute/googleplay/publish/localizing.html