Pull to refresh

Comments 9

Немного не по теме вопрос: как у вас реализовано disposeOnDestroy()? Эта библиотека или вы сами реализовали? (нашел какую-то либу с таким методом, но она не внушает доверия на первый взгляд)

Мы написали свою реализацию. Поскольку для нас использование Rx в проекте – архитектурное решение, выглядит это так:


abstract class BasePresenter<V : MvpView> : MvpPresenter<V>() {

    private val compositeDisposable = CompositeDisposable()

    override fun onDestroy() {
        compositeDisposable.dispose()
    }

    protected fun Disposable.disposeOnDestroy() {
        compositeDisposable.add(this)
    }
}
О, круто, у нас в проекте почти тоже самое, мы только до екстеншина не докрутили. Спасибо!
Также можно указать, что кроме currency, процентов и чисел — для каждой локали есть свои стандарты отображения даты-времени. Хорошо с форматированием времени с учетом локальных правил справляется android.text.format.DateUtils. Однако несмотря на то, что его методы требубт передачи context в параметре, локаль для фйорматирования берется не из configuration из resources из context, а через Locale.getDefault(). Context там внутри используется только для определения 12-ти или 24-х часового формата времени. Другими словами, Locale.getDefault() — еще один способ для получения текущей локали. Он используется многоми классами, библиотеками и его также важно поддерживать в правильном состоянии. В коде в статье также устанавливается дефолтная локаль через Locale.setDefault(locale). Однако, есть кейсы, когда значение может сбрасываться (например есть кейсы при изменении конфигурации в системе — когда в смартфоне выбираем другую локаль), поэтому нужно быть с этим внимательным.

Спасибо за дополняющий комментарий! Вы правы. Форматирование даты и времени согласно региональным стандартам довольно обширная тема и заслуживает отдельной статьи. Чтобы сохранить легкость подачи и лаконичность данной статьи, решили эту тему не затрагивать. Возможно, поговорим об этом на нашем YouTube канале или напишем еще одну статью.

Все верно! Хочу добавить по теме, но не про Android. В свое время на php тоже велосипед изобретал, оказалось, все на лету решается при помощи intl > NumberFormatter
А как быть с китайским языком, где числа пишутся тремя разными способами в зависимости от ситуации, а ещё для них привычна группировка цифр по 4 разряда?

Для этого можно использовать идентификатор системы счисления Unicode.


Locale.forLanguageTag("zh-CN-u-nu-hant")

Символ u определяет Unicode-расширения локали, которые идут далее парами ключ-значение. nu (numbers) – это система счисления. hant – традиционные китайские цифры. Другие допустимые значения можно посмотреть в репозитории CLDR.


Но. Поддержка расширений классом Locale не гарантирует поддержку со стороны платформы. При использовании java.text.NumberFormat на андроиде эффекта не будет. А если напрямую использовать android.icu.text.NumberFormat, то числа смапятся ¯\_(ツ)_/¯

Спасибо за статью. Несколько раз сталкивался с такой задачей и совсем недавно нашел способ поменять язык «налету». Это делается очень просто, в пару строк кода, однако при этом мое решение вообще никак не покрывало RTL, числа, currency.
Пожалуй затащу это решение на текущий проект :)
Sign up to leave a comment.