java - 刷新时如何保留 JFace TableViewer 中的选择?

标签 java eclipse eclipse-plugin jface tableviewer

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

更新模型后,我会调用 tableviewer.refresh(true) 并根据此处的文档:

TableViewer Methods

我希望保留我的选择。

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

这是我在这里错过的东西还是一个错误?

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

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 方法使其看起来相同)。

关于java - 刷新时如何保留 JFace TableViewer 中的选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32652944/

相关文章:

eclipse - 抑制 JavaScript 验证中的错误

java - 学习 HashMap

java - Java 超时哈希表

java - Market Place 在 Eclipse Luna 中不起作用

java - 如何找到适合 Eclipse Neon 的 SDK 版本?

通过命令行的 Eclipse 和 Maven

java - 如何将图像获取到数据库,并将其设置为表中特定行的 "tooltipText()"

java - 当 Callable 返回特定结果时停止执行器

android - 尝试在 eclipse 中使用 phonegap 创建 android 应用程序时出现错误 "Invalid resource directory name"

eclipse - egit 连接到 godaddy 共享帐户上的 git 存储库的问题