Firemonkey ListView 的点击事件一直让人摸不着头绪(各平台触发规则不太相同),因为它提供了点击相关的事件就有如下:
- OnChange:改变项目触发。
- OnClick:点击触发。
- OnItemClick:点击项目触发
- Windows 平台:按下立即触发,放开后接着触发 OnItemClickEx。
- Android 平台:按下立即触发,不用放开接着 OnItemClickEx(按钮 Button 触发顺序与 Widnows 相同,要放开才会触发 OnItemClickEx)。
- OnItemClickEx:项目内单项触发(以下以此为例,单纯只用此事件)。
下例将 Item.Apperance 设定为 Custom。
可获取每一个单项的事件触发:
有一些问题存在:
- 其中按钮点击后,并不会更新 ItemIndex,所以采用变通方式,在按钮的 TagFloat 加入编号来识别。
- 点击 Accessory 后是触发 Text 而非 Accessory,这部份我有改动到源码,使它能正常辨别是点击到那一个(改动源码并不建议,有兴趣自行研究)。
参考代码:
procedure TForm1.ListView1ItemClickEx(const Sender: TObject; ItemIndex: Integer; const [Ref] LocalClickPos: TPointF; const ItemObject: TListItemDrawable); begin if ItemObject is TListItemText then Label1.Text := ‘OnItemClickEx_Text_‘ + ItemIndex.ToString else if ItemObject is TListItemImage then Label1.Text := ‘OnItemClickEx_Image_‘ + ItemIndex.ToString else if ItemObject is TListItemAccessory then Label1.Text := ‘OnItemClickEx_Accessory_‘ + ItemIndex.ToString else if ItemObject is TListItemTextButton then Label1.Text := ‘OnItemClickEx_Button_‘ + TListItemTextButton(ItemObject).TagFloat.ToString else Label1.Text := ‘OnItemClickEx‘ + ItemIndex.ToString; end;
时间: 2024-11-14 05:30:08