0

我正在尝试显示 2 个领域对象组合的有序/过滤列表(通过 RealmBaseAdapter 或 RealmRecyclerViewAdapter)。这是我的领域对象类:

第一个对象:

public class TaskModel implements RealmModel {
@Required
@PrimaryKey
private String id;
@Required
private String name;
private Date dueDate;
private String category

private RealmList<SubTaskModel> subTasks;

......getters and setters
}

第二个对象:

public class SubTaskModel implements RealmModel {
@Required
@PrimaryKey
private String id;
@Required
private String name;
private Date dueDate;
private String category

TaskModel task;

......getters and setters
}

我的“任务”和“子任务”对象是一对多的关系,这就是为什么我在单独的对象类中对它们进行建模的原因。我想要做的是显示任务和子任务的组合列表,并按截止日期对它们进行排序。我还需要按名称排序并按类别和名称过滤(搜索)。IE

  • 任务 1 - 截止日期 1 月 1 日
  • 任务 2 - 截止日期 1 月 5 日
  • 子任务 1 - 截止日期 1 月 2 日
  • 子任务 2 - 截止日期 1 月 3 日

返回的有序列表应该是:

  • 任务1
  • 子任务1
  • 子任务2
  • 任务2

我倾向于遵循这种方法,但想确保这是性能和最佳实践方面的最佳解决方案。根据我收集到的信息,我必须创建另一个对象类,比如说“AllTask​​s”,每次我创建一个任务或子任务对象时,我都必须在这里创建一个链接到它们的 AllTask​​s 对象。此外,每当我更新子任务和/或任务中的名称、类别和日期字段时,我都必须使用相同的字段更新 AllTask​​s 对象。想确保没有更好的方法来满足我的要求(即必须记住每次更新 2 个对象,这并不理想)。

public class AllTasks extends RealmObject {
private static final int ENTRY_TASK = 0;
private static final int ENTRY_SUBTASK = 1;


/** The tag describes what kind of entry it represents */
private int tag;

/* Only one of these can be set, according to what this entry represents. */
@Nullable private TaskModel task;
@Nullable private SubTaskModel subTask;



private Date date;
private String name;
private String category;

public Date getDate() {
    return date;
}

  /* Can only be accessed from within the 'data' package */

void setDate(Date date) {
    this.date = date;
}

......other getter and setters

static AllTasks createAsTask(@NonNull final Realm realm, @NonNull 
final TaskModel task) {
    if(realm == null) {
        throw new IllegalArgumentException("'realm' may not be null");
    }
    if(mtask == null) {
        throw new IllegalArgumentException("'task' may not be 
  null");
    }

    AllTasks entry = realm.createObject(AllTasks.class);
    entry.tag = ENTRY_TASK;
    entry.task = task;
    return entry;
    }
...repeat above method for SubTasks

  }
4

0 回答 0