You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi 11.1 FMX ListView动态外观模式下添加页脚报错求助

Delphi 11.1 FMX ListView动态外观模式添加页脚文本的解决方案

问题根源

你的代码存在两个关键错误,直接触发异常:

  • 页脚添加逻辑错误:在数据循环内重复创建页脚项,页脚是ListView的全局底部元素,只需在所有数据加载完成后添加一次即可。
  • 动态外观使用误区:动态模式下,ListView的Item依赖自定义Drawable组件渲染内容,不能直接使用Item.Text属性,必须通过页脚布局的对应组件设置文本。

异常20/80通常是因为访问了未定义的Drawable,或是错误调用了默认Item的属性。

解决步骤

1. 配置ListView的Footer外观

在设计器中操作:

  • 选中ListView,展开Appearance属性组
  • 找到FooterAppearance,点击右侧编辑按钮打开布局编辑器
  • 添加TListItemText组件,命名为FooterText(需和代码中查找的名称完全一致)
  • 按需设置该组件的字体、颜色等样式

2. 修正代码

ListView1.Items.Clear; 
ListView1.BeginUpdate;
try
  // 加载数据项
  while not FDQuery1.Eof do
  begin
    Item := ListView1.Items.Add();
    Item.Tag := FDQuery1.FieldByName('CustomerID').AsInteger;
           
    var LName    : TListItemText := TListItemText(Item.Objects.FindDrawable('Name'));
    LName.Font.Size := 12;
    var LCode    : TListItemText := TListItemText(Item.Objects.FindDrawable('Code'));
    var LImage1  : TListItemImage := TListItemImage(Item.Objects.FindDrawable('Image1'));

    LImage1.ImageIndex := 0;
    LName.Text := FDQuery1.FieldByName('Name').AsString;
    LCode.Text := FDQuery1.FieldByName('Code').AsString;
  
    FDQuery1.Next;
  end;

  // 添加全局页脚
  var FooterItem := ListView1.Items.Add;
  FooterItem.Purpose := TListItemPurpose.Footer;
  // 获取Footer布局的文本组件并赋值
  var FooterText : TListItemText := TListItemText(FooterItem.Objects.FindDrawable('FooterText'));
  if Assigned(FooterText) then
    FooterText.Text := 'TEST';
finally
  ListView1.EndUpdate;
end;

FDQuery1.Close;
FDConnection1.Close;

注意事项

  • FindDrawable的名称必须和设计器中组件的名称完全匹配,大小写敏感
  • 动态外观模式下,所有Item(包括Header、Footer)的内容都要通过对应的Drawable组件设置,不能直接使用Item.Text
  • 禁止在数据循环内重复添加Footer,避免生成无效项引发异常或布局混乱

内容的提问来源于stack exchange,提问作者mesutuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 03:20:14