0

我发现无论何时创建我的 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 在数据真正更改或调用插入/更新/删除方法时触发。

4

0 回答 0