简体   繁体   English

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

[英]How to preserve selections in a JFace TableViewer when refreshing?

In my project I have a TableViewer which has a model, a content provider and a label provider. 在我的项目中,我有一个TableViewer ,其中包含一个模型,一个内容提供程序和一个标签提供程序。

Once I update my model I call tableviewer.refresh(true) and according to the documentation here: 更新模型后,我将调用tableviewer.refresh(true)并根据此处的文档进行操作:

TableViewer Methods TableViewer方法

I'm expecting my selections to be preserved. 我希望我的选择会被保留。

Unfortunately this doesn't happen. 不幸的是,这不会发生。 Does anybody know a solution for that? 有人知道解决方案吗?

Is it something that I miss in here or is it a bug? 是我在这里想念的东西还是错误?

EDIT: This is my model class(counter is for testing purposes to be sure that I have the same list returned after the first refresh): 编辑:这是我的模型类(计数器用于测试目的,以确保我具有第一次刷新后返回的相同列表):

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;
    }

}

This is the content provider class: 这是内容提供者类:

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;
}

The viewer tries to maintain the selection but if your content provider returns different objects for the elements that were selected after the refresh then the tree viewer will not be able to restore the selection. 查看器尝试维护选择,但是如果您的内容提供者为刷新后选择的元素返回了不同的对象,则树查看器将无法还原选择。

Your content provider must return the same object for things which have not changed for the selection to be preserved. 对于未更改的内容,内容提供者必须返回相同的对象,以保留选择。 (Or you can return an object where the equals and hashCode methods make it appear the same). (或者,您可以返回一个对象,其中equalshashCode方法使它看起来相同)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM