我发现无论何时创建我的 Fragment,Dao 返回的 LiveData 都会调用其观察者,即使 LiveData 值没有更改。我有 2 个实体,它们具有这样的一对一关系:
public class PetAndTracker {
@Embedded
public Tracker tracker;
@Relation(
parentColumn = "serialNum",
entityColumn = "trackerSerialNum"
)
public Pet pet;
public PetAndTracker() {
}
@Ignore
public PetAndTracker(Tracker tracker) {
this.tracker = tracker;
}
@Ignore
public PetAndTracker(Pet pet) {
this.pet = pet;
}
}
道法
@Transaction
@Query("SELECT * From Tracker")
LiveData<List<PetAndTracker>> getPetAndTrackerWithLiveData();
在我的 Fragment onCreate() 方法中,我调用 LiveData 方法,例如:
appDatabase.petDao()
.getPetAndTrackerWithLiveData()
.observe(this, new Observer<List<PetAndTracker>>() {
@Override
public void onChanged(List<PetAndTracker> list) {
...
}
});
onChanged 返回我数据库中的整个 PetAndTracker 列表,但我只希望 onChanged 在数据真正更改或调用插入/更新/删除方法时触发。