某些背景:
我正在使用一个系统,该系统使用配置文件传递所有数据;
添加子任务时,系统最终将新的子任务作为主事件的子项,而不是所需的父项。我已将问题缩小到这段代码。
//--getParent(Task, Event) finds the nearest parent task of child, if none: null public Task getParent(Task child, Event event){ Task parent = null; for(Task t : event.getTasks()){ if (t.getId() == child.getId()) return parent; } for (Task t : event.getTasks()){ parent = checkParent(child, t); if (parent != null) break; } return parent; } //--checkParent(Task, Task) checks if child is contained in parent.Subtasks; private Task checkParent(Task child, Task parent){ ArrayList subtasks = parent.getSubtasks(); for (Task t : subtasks) { if (t.getId() == child.getId()) { return parent; } } for (Task t : subtasks) { parent = checkParent(child, t); if (parent != null) break; } return parent; }
<小时/> 为了提供更多的上下文,我正在Android环境中开发。以下是调用父项的调用方法:
public void saveTask(View view) { Intent intent = new Intent(this, EventTaskViewerActivity.class); while (currentEventId != currentParentId && currentParentId != -1){ Task parent = dataManager.getTask(currentParentId, currentEventId); Task superTask = dataManager.getParent(parent, currentEvent); if (superTask != null) currentParentId = superTask.getId(); else { currentParentId = currentEventId; Event e = dataManager.addTaskToEvent(buildTaskFromActivity(), currentEvent); dataManager.updateEvent(e); break; } } intent.putExtra("CURRENT_USER_ID", androidId); intent.putExtra("CURRENT_EVENT_ID", currentEventId); startActivity(intent); }
答案 0 :(得分:0)
我不完全确定这段代码与其余代码有什么关系。具体来说,您的问题表明:
添加子任务时,系统最终将新的子任务作为a 主要事件的孩子,而不是期望的父母。
但是,您提供的代码位是检索和检查,而不是添加子任务。我认为看到checkParent()方法会有所帮助,也可能会看到添加子任务的方法。
没有它,我注意到的一件事似乎可能不合适:
Task parent = null;
for(Task t : event.getTasks()){
if (t.getId() == child.getId())
return parent;
}
设置parent = null
然后运行循环检查事件中的每个任务。如果任何任务具有与子项相同的ID,则返回空值。在这种情况下,您是想要返回null还是要将Event
作为父级返回?