У меня проблема с использованием LiveData в библиотеке комнат android.
У меня есть фрагмент, где есть RecyclerView
, и для заполнения используйте LiveData
с Observer
mDB.user().getUsers().observe(getViewLifecycleOwner(), new Observer<List<UserModel>>() {
@Override
public void onChanged(List<UserModel> userModels) {
updateUI(userModels);
}
});
Если я нажму на кнопку ДОБАВИТЬ, вызову startActivity
, открою новую активность с моей формой, скомпилирую все поля и @INSERT
новый элемент в БД
AsyncTask.execute(() -> {
mDB.user().addUser("NAME");
finish();
});
Когда закончим sh текущая активность, покажите снова предыдущий фрагмент и автоматически вызовите onChanged
. observe
вызывается только 2 раза, после чего, если я нажимаю кнопку ДОБАВИТЬ (в 3-й раз) и возвращаюсь к фрагменту, никогда не звоню и никогда не обновляю sh мой список. Я не знаю почему.
Я пытался с observeForever
безрезультатно.
Я вижу, что в отладке никогда не вызывается removeObserver
, поэтому наблюдатель активен.
Это мои зависимости
def room_version = "2.2.5"
def lifecycle_version = "2.3.0-alpha01"
// Room database
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
// ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
// LiveData
implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version"