我正在从以下示例中学习使用数据绑定:
https://github.com/ResoCoder/databinding-with-livedata-tutorial
尤其是我在使用以下代码时遇到麻烦:
第29行有一个吐司:
Toast.makeText(this,it,Toast.LENGTH_SHORT).show()
如果以编程方式更改editTextContent,则两次调用该吐司。您可以通过按下标记为“从SELECTTEXT中选择随机果”的按钮来重现此行为。
在此示例中,两次调用观察者是很浪费的,因为它两次显示了Toast,但是在我使用相同功能的应用程序中,这给用户带来了严重的问题,因为如果通过编程方式对用户更改数据,我将执行不同的操作。
我曾尝试通过将状态标记为程序更改来缓解此问题,但是在我的代码完成后才进行第二次调用。该呼叫似乎就像用户正在编辑文本一样,因此我的程序就像用户输入数据一样执行操作。我看不出有什么方法可以区分外部呼叫和输入数据的用户之间的区别。
请不要建议我隐藏条目的值,如果它没有变化,请忽略无关的调用。有一个合法的用例,其中用户在字段中键入完全相同的值。
理想情况下,找到不必要的呼叫的原因并消除它,最好同时解决问题并提高效率。不太理想的解决方法是,因此我可以忽略第二个调用,因此我的代码可以正常工作。
我怀疑这与设置适配器或可能在何时/何地设置观察者有关,但这只是一个猜测。
谢谢。
我正在从以下示例中学习使用数据绑定:https://github.com/ResoCoder/databinding-with-livedata-tutorial特别是,我在使用以下代码时遇到麻烦:https://。 。