FMX TListView.Sort在Delphi 10.3.3中不起作用

时间:2019-12-29 11:54:37

标签: delphi

我试图按字母顺序对TListView进行排序,但是我使用的方法似乎不起作用。

这是呼叫代码:

procedure TfMain.ButtonClick(Sender: TObject);
begin
miSort.IsChecked := not miSort.IsChecked; // miSort is a TMenuItem in a TPopupMenu
if miSort.IsChecked then
   begin
   lvLinks.BeginUpdate;
   lvLinks.Sort(AlphaSort);
   lvLinks.EndUpdate;
   end;
end;

Sort方法需要TFmxObjectSortCompare

TFmxObjectSortCompare = reference to function (Left, Right: TFMXObject): Integer;

,有我的

function AlphaSort(Left, Right: TFMXObject): Integer;
begin
result := CompareText(TListViewItem(Left).Text, TListViewItem(Right).Text) // require System.SysUtils
end;

无论是否有BeginUpdate ... EndUpdate,它都不起作用。

1 个答案:

答案 0 :(得分:0)

在FMX中,TListView继承自TAdapterListView,它公开了Adapter类型的IListViewAdapter属性。该界面为列表项提供了一种Sort方法。

根据您的示例,此方法可能有效:

  lvLinks.Adapter.Sort(TDelegatedComparer<TListItem>.Create(
    function(const Left, Right: TListItem): Integer
    begin
      Result := CompareText(TListViewItem(Left).Text, TListViewItem(Right).Text);
    end));