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)
                }
            })
编辑:已解决
我曾经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)
  }
}
| 归档时间: | 
 | 
| 查看次数: | 4799 次 | 
| 最近记录: |