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