0

在我的 Android 应用程序中,我有一个带有下拉菜单的设置活动,用户可以在其中设置他们的偏好,例如他们的性别。下拉菜单包含多个本地化形式的选项,用德语表示女性、男性和其他选项:“Weiblich”、“Männlich”、“Andere”。

如何将视图中的本地化字符串转换为可以存储在服务器上的内部表示 - 反之亦然,从服务器到本地化字符串的值?

到目前为止,我想出的只是一个硬编码的 if-else 语句,这似乎是个坏主意:

private String getSelectedGender() {
        String selectedGender = genderSpinner.getSelectedItem().toString();
        if (selectedGender.equals(getResources().getString(R.string.Female))) {
            return "female";
        } else if // ...
                  // ...
    }

其他方式相同,从内部表示到视图:

private void setGenderInView(User user) {
        String gender = user.getGender();
        String localizedGender;
        if (gender.equalsIgnoreCase("female")) {
            localizedGender = getResources().getString(R.string.Male);
        } //...
    }

如果我能得到资源的密钥就好了<string name="female">Weiblich</string>

我觉得这是本地化应用程序中的一个常见问题,应该有一些通用的解决方案 - 我只是想不出怎么做。

4

1 回答 1

0

Pair如果我需要存储的数据多于两件事,我对此类本地化问题使用的解决方案是使用一个对象或创建一个 POJO。

但是对于您的情况, aPair应该可以正常工作。您可以像这样创建一个:

Pair<String, String> pair = new Pair<>(INTERNAL_STRING, LOCALIZED_STRING);

基本上,您将传入一个数组或对象列表,而不仅仅是将一个数组或字符串列表传递给 Spinner 的适配器Pair。每个Pair对象都将拥有本地化字符串和内部字符串。

当然,这确实需要为您的 Spinner 定制适配器,但如果您还没有使用定制适配器,创建一个并不难。在您的自定义 Spinner 适配器中,您只需让它显示来自 Pair 对象的本地化字符串。

然后,当您获得结果时,只需从Pair返回给您的对象中获取内部字符串。

在检索用户的结果时,您的两种解决方案都需要进行太多检查,如果您的数据集比简单的 Genders 更大,这可能会变得非常忙碌。想象一下,如果您的 Spinner 用于 Country oo 所需的所有 If 语句

因此,使用此解决方案,无需执行任何检查。您只需要检索已存储的内部值。本地化字符串和内部字符串之间存在区别,这使您可以快速轻松地检索任一字符串以在应用程序中使用。

于 2019-01-28T12:02:04.700 回答