首页 > 解决方案 > FMX TListView.Sort 在 delphi 10.3.3 中不起作用

问题描述

我正在尝试按字母顺序对 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,它都不起作用。

标签: delphi

解决方案


在 FMXTListView中继承自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));

推荐阅读