|
Re: strange index update with virtual table [message #633994 is a reply to message #633866] |
Wed, 20 October 2010 08:33 |
Luca Ferrari Messages: 159 Registered: November 2009 |
Senior Member |
|
|
The following is a snippet that demonstrates the problem:
public class View extends ViewPart {
public static final String ID = "RCPEXAMPLE.view";
private TableViewer viewer;
class ViewLabelProvider extends LabelProvider implements
ITableLabelProvider {
public String getColumnText(Object obj, int index) {
return getText(obj);
}
public Image getColumnImage(Object obj, int index) {
return getImage(obj);
}
public Image getImage(Object obj) {
return PlatformUI.getWorkbench().getSharedImages().getImage(
ISharedImages.IMG_OBJ_ELEMENT);
}
}
public void createPartControl(Composite parent) {
viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.VIRTUAL
| SWT.V_SCROLL);
ViewContentProvider provider = new ViewContentProvider( viewer );
viewer.setContentProvider( provider );
viewer.setLabelProvider(new ViewLabelProvider());
viewer.setInput( null );
viewer.setItemCount( 100 );
}
public void setFocus() {
viewer.getControl().setFocus();
}
class ViewContentProvider implements IStructuredContentProvider, ILazyContentProvider {
private List<String> content = null;
private Viewer myView = null;
public void inputChanged(Viewer v, Object oldInput, Object newInput) {
System.out.println("Input changed!");
if( newInput instanceof List )
content = (List<String>) newInput;
else
System.out.println("Input changed with " + newInput);
this.myView.refresh();
}
public void dispose() {
}
public Object[] getElements(Object parent) {
return content.toArray();
}
public ViewContentProvider( Viewer view){
super();
this.myView = view;
}
@Override
public void updateElement(int index) {
System.out.println("Updating element " + index );
TableViewer tableviewer = (TableViewer) myView;
tableviewer.replace( new String ("Element " + index), index);
}
}
}
Running the above snippet force a message Updating element 31 as the view becomes visible, after that a list of messages Updating element from 0 to the last row visible is displayed. It seems that the virtual table is forcing the update of a random (?) element that is yet not visible. This can be annoying if the elements are loaded from a database, since it requires more time that that required to display rows on the screen.
Any idea?
|
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.03996 seconds