我正在编写一个黑莓应用程序。我有一个自定义列表字段,我可以在其中选择列表中的一个项目,将编辑屏幕推送到堆栈上。我编辑该项目并保存,当我弹出该屏幕以返回我的列表屏幕时,我想查看我刚刚在列表中反映的更新。我已经在其他只有 LabelFields 的屏幕上完成了此操作,并且效果很好。但是,对于列表屏幕,调用 invalidate() 似乎什么也没做。我知道该值已通过打印行正确保存,并且我看到列表字段中的 paint() 方法被调用。但是我可以让列表字段更新的唯一方法是从屏幕上删除它并重新添加它。这似乎是错误的。我究竟做错了什么?
public class ListTasksScreen extends MainScreen{
private TaskList tasks;
private CustomListField taskListField;
public ListTasksScreen (TaskList tasks){
super();
this.tasks = tasks;
Vector incompleteTasks = tasks.getIncompleteTasks();
taskListField = new CustomListField(incompleteTasks, tasks);
add(taskListField);
}
public void updateTaskList(TaskList t)
{
Vector incompleteTasks = t.getIncompleteTasks();
taskListField= new TaskListField(incompletetTasks, t);
//I just want to call taskListField.invalidate() here.
//the only thing that seems to work is deleting taskListField
//and re-adding
this.delete(taskListField);
add(taskListField);
}
}