Arf*_*ann 1 android-edittext kotlin
我有 2 个编辑文本。当editText1被修改时,editText2的内容将等于editText1 * 5。当editText2被修改时,editText1的内容将等于editText2 * 5。
现在,如果我使用addTextChangedListener()它,它就会循环,因为 editTexts 内容会发生变化,总是导致崩溃。我需要检测 editTexts 是否被用户修改或以编程方式修改。
任何想法?
如果可以帮助的话,这是我的代码:
fun EditText.doubleValue() = text.toString().toDoubleOrNull() ?: 0.0
editText1.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {}
override fun onTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {}
override fun afterTextChanged(editable: Editable) {
editText2.setText(editText1.doubleValue() * 5)
}
})
editText2.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {}
override fun onTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {}
override fun afterTextChanged(editable: Editable) {
editText1.setText(editText2.doubleValue() * 5)
}
})
Run Code Online (Sandbox Code Playgroud)
编辑:已解决
我曾经if(editText.isFocused)检查用户是否更改了
您可以将 TextWatcher 保存在变量中,在以编程方式更改每个变量的内容之前删除它们TextView,然后再次将它们添加回来。
class MyActivity: AppCompatActivity() {
private val textWatcher1 = object : TextWatcher {
override fun beforeTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {}
override fun onTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {}
override fun afterTextChanged(editable: Editable) {
updateEditText2()
}
}
fun EditText.doubleValue() = text.toString().toDoubleOrNull() ?: 0.0
private val textWatcher2 = object : TextWatcher {
override fun beforeTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {}
override fun onTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {}
override fun afterTextChanged(editable: Editable) {
updateEditText1()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
editText1.addTextChangedListener(textWatcher1)
editText2.addTextChangedListener(textWatcher2)
}
private fun updateEditText1() {
editText1.removeTextChangedListener(textWatcher1)
editText1.setText(editText2.doubleValue() * 5)
editText1.addTextChangedListener(textWatcher1)
}
private fun updateEditText2() {
editText2.removeTextChangedListener(textWatcher2)
editText2.setText(editText1.doubleValue() * 5)
editText2.addTextChangedListener(textWatcher2)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4799 次 |
| 最近记录: |