从EContentAdapter更新UI的正确方法

从EContentAdapter更新UI的正确方法

问题描述:

我有一个econtent适配器,它本质上导致许多表的刷新。尽管从理论上讲,可以将所有通知过滤到应该引起表格刷新的确切通知,但由于我们有一个庞大的模型,以及可能触发一个或多个事件的许多不同事件和更改,这会非常困难和耗时刷新。此外,经常发生的情况是单个“用户事件”(例如,在应用程序中单击状态 - >新建),触发4个对象在幕后创建,所有这些对象与通知立场看起来非常相似,因此很难过滤掉。我想知道是否有一种好的方法来做某种“延迟工作”,这样4个通知只会导致一次刷新。例如,类似于:从EContentAdapter更新UI的正确方法

public void notifyChanged(final Notification notification) 
    super.notifyChanged(notification); 
    @Override 
    public void run() { 
     if(matchesFilters(notification)) { 
      //some sort of check to see if we recently had another event that would have triggered a refresh? 
      if(!schedulingJob) { 
       scheduleDelayedJob(); 
      } 
     } 
    } 
} 

不幸的是我在工作之类的东西没有什么经验,所以这将是非常有益的,如果有人能够给什么这样做的正确的方法是提供援助。作为另一个例子,如果某人在我们的应用程序中非常迅速地碰到了20次控制-N,它将快速创建20个新状态,而我们只想在这20个通知结束时更新UI,而不是刷新20次。

如果我理解正确,Eclipse为您提供了所需的全部功能。首先,应该在显示线程上更新GUI。其次,有一种异步执行的方法,如下所示:

final IWorkbench workbench = PlatformUI.getWorkbench(); 
workbench.getDisplay().asyncExec(new Runnable() { 
    public void run() { 
    // Do your thing, e.g. refresh() 
    } 
}); 

你在Runner中做什么取决于GUI框架。如果您使用的是JFace,那么您可以执行刷新(),我相信这对于排队工作非常明智。

+0

不完全是我的意思,虽然这仍然有帮助。基本上,你上面的解决方案仍然会导致“我的事情”,例如如果20个通知在1秒内下降到管道上,refresh()会发生20次。基本上我正在寻找一些延迟“刷新”一段时间的东西,这样如果用户非常快速地执行操作,最终不会出现刷新的日志堵塞。 – jekelija 2013-04-25 12:03:40