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
相关产品推荐
相关产品推荐

