Как создать список доступных валют в Котлине - PullRequest
0 голосов
/ 03 ноября 2019

Я хочу создать список пар используемых в настоящее время валют и их отображаемое имя. Если возможно, я бы хотел немного уменьшить (подробнее об этом ниже).

Я пытался использовать Currency.getAvailableCurrencies (), но он возвращает валюты, которые больше не используются. Лучшее решение, которое у меня сейчас есть, - это использование Locale.getAvailableLocales () и получение оттуда валют (см. Следующий код).

Я использую SortedSet для удаления дубликатов (которых достаточно в списке локалей) ичтобы это было отсортировано. Пара состоит из отображаемого имени и символа валюты.

val filteredListOfCurrencies: SortedSet<Pair<String?,String?>> = listOfLocale.map{Currency.getInstance(it)?.displayName to Currency.getInstance(it)?.symbol}.toSortedSet(
            compareBy{it.first})

Мои вопросы: 1) Есть ли лучший способ сделать это? 2) Есть ли способ уменьшить список (в настоящее время> 150 валют)

Список будет использоваться для приложения отслеживания затрат. Стандарт заключается в том, что будет использоваться NumberFormat.getCurrencyInstance (), то есть предустановленная валюта будет принадлежать устройству, но я хочу дать пользователю возможность изменять свою валюту (а также переключаться на «валюту устройства»). Поэтому «второстепенная валюта», скорее всего, будет охватываться «валютой устройства», поэтому, если это возможно, я бы хотел сократить список до более короткого, в противном случае он может быть слишком большим и, следовательно, плохим пользовательским интерфейсом. .

1 Ответ

0 голосов
/ 03 ноября 2019

вместо Currency.getAvailableCurrencies (), вы можете передать Locale и дату, чтобы получить действительные коды валюты

getAvailableCurrencyCodes 
public static String[] getAvailableCurrencyCodes (ULocale loc, 
                Date d)

, где

loc ULocale: the locale for which to retrieve currency codes.
d   Date: the date for which to retrieve currency codes for the given locale.

просто передать в локальи дату, и он вернет вам действительные коды валют.

https://developer.android.com/reference/android/icu/util/Currency.html#getAvailableCurrencyCodes(android.icu.util.ULocale,%20java.util.Date)

...