Обновите все TextView-ы со значением из пользовательских настроек - PullRequest
0 голосов
/ 19 июня 2020

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

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

class CurrencyTextView : androidx.appcompat.widget.AppCompatTextView {

@Inject
lateinit var userSettings: UserSettings

lateinit var currencyObserver: Observer<String>

constructor(context: Context) : super(context) {
    initTextView()
}

constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
    initTextView()
}

constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
{
    initTextView()
}


private fun initTextView() {
    inject(this)

    val currencyObserver = Observer<String> {
        this.text = it
    }
}

override fun onAttachedToWindow() {
    super.onAttachedToWindow()
    userSettings.getCurrency().observe(this, currencyObserver)

}

override fun onDetachedFromWindow() {
    super.onDetachedFromWindow()
    userSettings.getCurrency().removeObserver(currencyObserver)
}

}

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

...