我试图实现一个tableviewer,它可以根据用户点击列标题的顺序对值进行排序。 例如如果列列有column1,column2,column3和user三列,则按以下顺序列出column3,column2,column1,然后,第3列的值首先排序,然后是第2列,最后是column1。
我已经按照以下方式覆盖了比较方法:
protected int doCompare(Viewer tableViewer, Object row1, Object row2)
{
SampleTableLabelProvider labelProvider = SampleTableLabelProvider ((TableViewer) tableViewer).getLabelProvider());
boolean areBothRowsEqual = false;
for(String orderedColumn : getOrderedList()) // getOrderedList() stores the column names in the order in which they are clicked by user
{
int orderedColumnIndex = // logic to get the index of orderedColumn in the tableViewer ;
if(compareStrings(labelProvider, row1, row2, orderedColumnIndex ) == 0)
{
areBothRowsEqual = true;
}
else
{
areBothRowsEqual = false;
break;
}
}
if(areBothRowsEqual)
{
return compareStrings(labelProvider, row1, row2, columnIndex);
}
else
{
return 0;
}
}
这个逻辑不起作用,这就是发生的事情: 对于例如column3由用户选择,此列将被排序。但是下次当另一列说单击column2时,TableViewer中的对象row1和row2不会以最新的有序格式出现。
我如何实现这一目标?
答案 0 :(得分:0)
您面临的问题似乎是排序算法的属性。
在实现column2排序后,稳定算法将使日期column1排序。
您必须检查方法getOrderedList()
中的算法是否为stable。