如何在刷新时保留JFace TableViewer中的选择



在我的项目中,我有一个TableViewer,它有一个模型,一个内容提供者和一个标签提供者。

一旦我更新了我的模型,我调用tableviewer.refresh(true),根据这里的文档:

TableViewer中方法

我希望我的选择能被保留。

不幸的是,这并没有发生。有人知道解决方法吗?

是我在这里错过了什么还是它是一个bug?

编辑:这是我的模型类(计数器用于测试目的,以确保在第一次刷新后返回相同的列表):

public class ItemWorkgroup {

    List<Item> currentItems = new ArrayList<Item>();
    static int counter = 0;

    public ItemWorkgroup()
    {
    }
    public void add(Item item)
    {
        currentItems.add(item);
    }
    public Object[] getItems()
    {
        return currentItems.toArray();
    }
    public void addList(List<Item> newItemsList)
    {   
        System.out.println("Current items first 1: "+currentItems);
        if(counter == 0)
        {
            currentItems = newItemsList;
            counter++;
        }
        System.out.println("Current items first 2: "+currentItems);

    }
    public List<Item> getItemList()
    {   
        return currentItems;
    }
}

这是内容提供程序类:

public class ContentProvider implements IStructuredContentProvider{

private Mediator mediator;
private ItemWorkgroup model;
public ContentProvider(Mediator mediator, ItemWorkgroup model) {
    // TODO Auto-generated constructor stub
    this.mediator = mediator;
    this.model = model;
}
@Override
public void dispose() {
    // TODO Auto-generated method stub
}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
    // TODO Auto-generated method stub
    System.out.println("Input changed");
}
@Override
public Object[] getElements(Object inputElement) {
    // TODO Auto-generated method stub
    System.out.println("Getting elements");
    if(inputElement instanceof ItemWorkgroup)
    {           
        return ((ItemWorkgroup) inputElement).getItems();
    }
    else
        return new Object[0];   
}

public ItemWorkgroup getItems()
{
        //Items is a list of items that I'm getting from somewhere
        model.addList(items);

    return model;
}

查看器试图保持所选内容,但如果内容提供程序为刷新后选择的元素返回不同的对象,则树查看器将无法恢复所选内容。

您的内容提供程序必须为未更改的内容返回相同的对象,以保留选择。(或者您可以返回一个对象,其中equalshashCode方法使其看起来相同)。

最新更新