#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
, когда вы его отображаете, вместо этого, да — все, что подходит лучше всего!