котлин — изменение десятичных знаков на нескольких фрагментах из одного фрагмента

#android #kotlin #android-fragments

Вопрос:

для моего приложения я считываю несколько значений с датчиков, подключенных по Bluetooth. Один фрагмент позволяет редактировать датчики, а другой фрагмент показывает все значения в виде таблицы. В третьем фрагменте настроек я хочу иметь возможность изменять десятичные знаки, в которых отображаются значения во всех фрагментах.

я знаю, что для изменения десятичного формата я использую следующий код.

  var form = DecimalFormat("#,###.##") // number format
 

и чтобы добавить этот формат к значениям, выполните следующие действия

 form.format(temperature)
 

в настоящее время у меня есть радиогруппа, в которой каждая радиокнопка настроена для изменения количества знаков после запятой в форме переменной.

как сделать так, чтобы это изменение отображалось во всех фрагментах, а не только во фрагментах настроек? понадобится ли мне модель общего представления?

Ответ №1:

Общий ViewModel доступ хорошо подходит для этой проблемы, просто создайте ViewModel form свойство with и в каждом фрагменте получите экземпляр ViewModel , связанный с действием, как

 private val viewModel: SharedViewModel by activityViewModels()
 

Теперь вы можете обновить form свойство при изменении радио, как

 radioGroup.setOnCheckedChangeListener { group, checkedId ->
    val format = when(checkedId){
        R.id.radio_two ->   TWO_DECIMAL_PLACES
        R.id.radio_three -> THREE_DECIMAL_PLACES
        else -> DEFAULT_FORMAT
     }
     viewModel.form = DecimalFormat(format)
}
 

После этого просто используйте значение этого свойства перед отображением данных

Комментарии:

1. 1 но вы можете захотеть сделать form LiveData или подобное (с обычными настройщиками и т. Д.), Чтобы ваши другие фрагменты могли observe это сделать, и автоматически обновляться, чтобы отразить новую настройку. Но если данные обновляются достаточно часто, вы могли бы просто проверить текущее значение form , когда вы его отображаете, вместо этого, да — все, что подходит лучше всего!