2015-09-18 2 views
1

В моем проекте у меня есть TableViewer, у которого есть модель, поставщик контента и поставщик этикеток.Как сохранить выбор в JFace TableViewer при освежении?

После того, как я обновлю свою модель я называю tableviewer.refresh(true) и в соответствии с документацией здесь:

TableViewer Methods

Я ожидаю, что мой выбор будет сохранен.

К сожалению, этого не происходит. Кто-нибудь знает решение для этого?

Это что-то, что я пропустил здесь или это ошибка?

EDIT: Это моя модель класса (счетчик для целей тестирования, чтобы убедиться, что я тот же список вернулся после первого обновления):

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

ответ

1

зритель пытается сохранить выбор, но если ваш провайдер контента возвращает разные объекты для элементов, которые были выбраны после обновления, то зритель дерева не сможет т o восстановить выбор.

Ваш контент-провайдер должен возвратить тот же объект для вещей, которые не были изменены для выбора, который необходимо сохранить. (Или вы можете вернуть объект, где методы equals и hashCode заставляют его отображаться одинаково).

Смежные вопросы