Двусторонняя привязка: как отформатировать валюту TextWatcher на EditText? - PullRequest
0 голосов
/ 20 сентября 2019

Моя модель имеет расширение 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 для форматирования валюты в режиме реального времени, когда пользователь вводит номер?

1 Ответ

0 голосов
/ 20 сентября 2019

создайте средство форматирования, которое принимает значение EditText

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

, а затем создайте привязываемый текст или LiveData, который сохраняет текст EditText, получая его из TextWatcher.

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