从数据库重新填充 EditTexts 的最佳方法

时间:2021-02-15 19:36:56

标签: android kotlin android-edittext android-room android-livedata

我正在制作一个应用程序,其中包含来自存储在 Room 数据库中的编辑文本的大量用户输入以及附加的 TextWatcher。当一个片段被打开时,我想用以前存储的值重新填充 EditTexts。为此,我目前正在从数据库中观察 LiveData 一次,并在重新填充 EditText 后移除观察者。

这在我第一次打开每个片段时效果很好。我遇到的问题是,如果我对一个片段进行快速更改——例如删除文本——然后导航离开,然后再返回,EditText 会重新填充旧数据而不是最新更改。

我从数据库检查器知道正在存储新值,但是当 EditTexts 重新填充时,TextWatcher 导致旧值再次存储在数据库中,覆盖新值。所以我猜测问题是数据库更新 LiveData 的延迟,并且在实际从数据库返回数据之前重新填充 EditTexts。

我是否以错误的方式处理这个问题?我是否应该改用 SavedInstanceState,并且以某种方式只在第一次加载时使用 LiveData?我目前没有使用存储库——我正在自学 Kotlin,但还没有了解它们。那能解决这个问题吗?我有很多片段和很多 EditText,所以我试图找到最干净的方法来处理这个问题。

我希望这很清楚。感谢您抽出时间来回答!

0 个答案:

没有答案