FireMonkey TListview搜索重新加载问题

t j*_*t j 5 delphi listview firemonkey delphi-xe5

执行搜索时,TListview无法正确重新加载,清除搜索,然后重新加载列表视图.使用XE5.

步骤是:

  1. 项目运行后输入文本进入搜索.
  2. 清除搜索,单击"清除"按钮或删除搜索文本或单击搜索"X"按钮.
  3. 按"重新加载"按钮.什么也没出现.您可以单步执行重新加载过程,并查看是否已添加每个项目.但是,结果列表计数为"0"!!!
  4. 但是,如果您添加搜索文本,则会重新显示这些项目.这太疯狂了.然后再次清除搜索并显示所有项目.点击重新加载按钮,它们就会消失.
  5. 我已经尝试过所有可以解决这个问题的技巧,并且没有任何结果.即使清除搜索,列表视图也会保留搜索内容.
  6. 所以目前listview是一个故障控制.如果进行搜索,则无法清除搜索并重新加载列表视图.
  7. 我甚至尝试过TSearchBox并设置"DeleteSelection","ResetSelection"和"ClearSelection"<>这些都不起作用.

这个古怪的事情有什么帮助吗?

代码如下:

procedure TForm1.FormCreate(Sender: TObject);
var
  i: integer;
  LItem: TListviewItem;
begin
  if Assigned(Listview1) then
    Listview1.Items.Clear;
  for i := 1 to 20 do
  begin
    LItem := Listview1.Items.Add;
    LItem.Text := IntToStr(i);
  end;
end;

procedure TForm1.btnButton1Click(Sender: TObject);  { reload button }
var
  i: integer;
  LItem: TListviewItem;
begin
  btnButton2Click(btnButton2);                <<<<edit add
  if Assigned(Listview1.Items.Filter) then    <<<<edit add
    Listview1.Items.Filter := nil;            <<<<edit add
  if Assigned(Listview1) then
    Listview1.Items.Clear;
  for i := 1 to 20 do
  begin
    LItem := Listview1.Items.Add;
    LItem.Text := IntToStr(i);
  end;
end;

procedure TForm1.btnButton2Click(Sender: TObject); { clear button }
var
  i: integer;
  SearchBox: TSearchBox;
begin
  for i := 0 to Listview1.Controls.Count - 1 do
    if Listview1.Controls[i].ClassType = TSearchBox then
    begin
      SearchBox := TSearchBox(Listview1.Controls[i]);
      Break;
    end;
  if Assigned(SearchBox) then      
    SearchBox.Text := '';
end;
Run Code Online (Sandbox Code Playgroud)