【问题标题】:kotlin- change decimal places on multiple fragments from one fragmentkotlin-从一个片段更改多个片段的小数位
【发布时间】:2021-10-16 00:19:20
【问题描述】:

对于我的应用,我从蓝牙连接的传感器中读取了多个值。一个片段允许您编辑传感器,另一个片段显示 tableView 中的所有值。 在第三个设置片段上,我希望能够更改所有片段上出现的值的小数位。

我知道要更改十进制格式,我使用以下代码。

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

要将此格式添加到值中,请执行以下操作

form.format(temperature)

目前我有一个单选组,每个单选按钮设置为更改变量形式中的小数位数。

我如何使这种更改出现在所有片段中,而不仅仅是设置片段?我需要共享视图模型吗?

【问题讨论】:

    标签: android kotlin android-fragments


    【解决方案1】:

    Shared ViewModel 非常适合这个问题,只需创建一个带有form 属性的ViewModel,并在每个片段中获取一个与活动关联的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 但您可能希望将form 设为LiveData 或类似的(使用通常的设置器等),以便您的其他片段可以observe 它,并自动更新以反映新设置.但是,如果数据更新得足够频繁,您可以在显示时检查 form 的当前值,是的 - 任何最适合的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多