У меня есть приложение, в котором я работаю с валютами. Пользователь может изменить валюту в пользовательских настройках приложения, и я хочу, чтобы все текстовые представления (отображающие валюту) обновлялись валютой, выбранной пользователем. Наивный подход заключался бы в том, чтобы явно устанавливать валюту в каждом месте, где я ее использую (это было бы моим последним средством)
Я пытаюсь создать текстовое представление специально для отображения валюты. Создав его, я могу использовать его везде, где захочу, и он будет обновляться текстом из настроек. 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 текстом.