Я застрял с проблемой обновления списка при фильтрации списка элементов из базы данных области.
Что именно я пытаюсь сделать, это добавить некоторые пользовательские записи в таблицу, и когда пользователь нажимает кнопку фильтра, я запрашиваю базу данных области, чтобы отфильтровать результаты. Я могу напечатать результаты в журналах, но это не отражается в списке, так как прослушиватель изменений не вызывается из-за отсутствия изменений в базе данных. Может ли кто-нибудь подсказать, как отразить результаты, полученные с помощью запроса в списке?
Класс модели, как показано ниже.
public class UserModel extends RealmObject {
@PrimaryKey
private int id;
@Required
private String firstName;
@Required
private String lastName;
private UserAddressModel userAddress;
private int age;
public UserAddressModel getUserAddress() {
return userAddress;
}
public void setUserAddress(UserAddressModel userAddress) {
this.userAddress = userAddress;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Запрос на добавление записи в базу данных приведен ниже.
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(@NonNull Realm realm) {
int nextID;
if (mUserModel == null) {
// increment index
Number num = realm.where(UserModel.class).max("id");
if (num == null) {
nextID = 1;
} else {
nextID = num.intValue() + 1;
}
} else {
nextID = mUserModel.getId();
}
UserModel obj = new UserModel();
obj.setId(nextID);
obj.setFirstName(etFirstName.getText().toString().trim());
obj.setLastName(etLastName.getText().toString().trim());
obj.setAge(Integer.parseInt(etAge.getText().toString().trim()));
UserAddressModel userAddressModel = new UserAddressModel();
userAddressModel.setAddress(etAddress.getText().toString().trim());
userAddressModel.setId(nextID);
obj.setUserAddress(userAddressModel);
realm.copyToRealmOrUpdate(obj);
realm.beginTransaction();
realm.addChangeListener(mOnDataChangeListener);
}
});
Запрос на фильтрацию записи приведен ниже.
RealmResults<UserModel> realmList = realm.where(UserModel.class).greaterThanOrEqualTo("age", 20).findAll();
Выше запрос дает желаемый результат, как я напечатал его в журнале. Но не обновляйте список.
Я также попытался добавить прослушиватель вызовов к вышеуказанному запросу и уведомить об изменении набора данных в списке, но это не помогло.
Любая помощь будет принята с благодарностью. ТИА.