【问题标题】:Two-way binding: how to format currency TextWatcher on EditText?双向绑定:如何在 EditText 上格式化货币 TextWatcher?
【发布时间】:2019-09-20 08:09:54
【问题描述】:

我的模型是 androidx.lifecycle.ViewModel 的扩展而不是 BaseObservable

import androidx.lifecycle.ViewModel
class MainViewModel: ViewModel() {
    val price:String? = null
}

XML:

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@={viewModel.price}"/>

活动:

val binding: ActivityMainBinding = ...
binding.viewModel = viewModel 
binding.setLifecycleOwner(this)

有没有办法在用户输入数字时应用 textwatcher 实时格式化货币?

【问题讨论】:

标签: android androidx android-jetpack


【解决方案1】:

创建一个采用 EditText 值的格式化程序

object Converter {
    @InverseMethod("formatCurrency")
    fun format(
        view: EditText, oldValue: Long,
        value: Long
    ): String {
        // Converts long to String.
    }
}

然后创建一个可绑定文本LiveData,通过从TextWatcher获取它来保留EditText的文本。

android:text="@={Converter.formatCurrency(viewmodel.yourCurrentText)}"

【讨论】:

  • 我收到错误:在 xx.util.Converter 类中找不到方法 formatCurrency(java.lang.String)
  • 你需要在你的xml中导入这个Converter类
  • 或者您可以相应地更改转换器的方法名称
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多