在 android 中从领域数据库过滤数据时更新列表

Update the list when data is filtered from the realm database in android

当我从领域数据库中过滤项目列表时,我遇到了列表更新问题。

我真正想做的是在 table 中添加一些用户记录,当用户单击过滤器按钮时,我查询领域数据库以过滤结果。我能够将结果打印在日志中,但不会反映在列表中,因为由于数据库没有更改而未调用更改侦听器。谁能指导一下如何在列表中反映查询得到的结果?

型号class如下图

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();

以上查询给出了我在日志中打印的所需结果。但是不要更新列表。

我也曾尝试将调用监听器添加到上述查询并将数据集更改通知列表,但没有帮助。

如有任何帮助,我们将不胜感激。 TIA.

好的,经过各种尝试,终于找到了关于问题的解决方案。您需要做的就是调用 RealmRecyclerViewAdapter 的 updateData() 方法,您将扩展到您的普通 recyclerview。

下面的代码片段提供了解决方案。

realm.executeTransaction(new Realm.Transaction() {
                @Override
                public void execute(@NonNull Realm realm) {
                    userModels = realm.where(UserModel.class).greaterThanOrEqualTo("age", 20).findAll();
                }
            });
            dataListAdapter.updateData(userModels);

在上面的代码中要记住的要点是你必须在事务块之外通知数据。如果不在块外完成,应用程序将崩溃,说明当事务为 运行.

时您无法通知数据

希望对某处的人有所帮助。

编码愉快!!!