我有一个应该返回EditText文本当前更新值的方法。但是,由于某种原因,为了使它一开始实际工作,输入必须更改2次。并且,当它返回时,它返回前一个值,而不是当前的值。
fun EditText.text(): String {
    var whatever = text.toString()
    doOnTextChanged { text, _, _, _ -> whatever = text.toString() }
    return whatever
}我不知道我是否说得很清楚,但我已经尝试了很长一段时间,但都没有成功。
发布于 2019-11-19 22:12:16
您的whatever变量不能超过您创建的函数。下面是调用edit()函数时发生的情况:
whatever被创建并分配给文本视图中文本的当前值。whatever的值,这是一个毫无意义的操作,因为whatever在TextWatcher活动时无法访问。whatever的值。它将与步骤1中的值相同,因为还没有任何机会对其进行更改。当您多次调用您的函数时,您将向您的TextWatchers添加多个无用的TextView。你的功能可能也是
fun EditText.text() = text.toString()这并不是很有用,但是有效地执行了与原始函数相同的操作,减去了添加不必要的TextWatchers。
如果没有您所要做的工作的上下文,我就无法推荐如何修复您的项目。您的函数已经返回了最新更改的EditText值,但是您将其描述为该值是滞后的。我必须看到调用这个函数的代码,才能了解您想要做的事情。
我可以猜到也许你没有意识到String是不可变的。函数返回的字符串不会因为原来指向它的变量被指向其他东西而被更新。
如果您希望在文本更改时发生某些事情,请将操作直接放在lambda中。简单地更新变量在TextWatcher中没有多大意义,因为文本的最新值始终可以直接从TextView中检索。
https://stackoverflow.com/questions/58941920
复制相似问题