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

如何实现FMX ListView单选勾选:仅选中项显示复选标记

实现FMX ListView单选勾选功能

你提到的示例代码是实现多选勾选的逻辑,要改成单选(每次仅勾选一项,新勾选时自动取消之前的选项),需要调整逻辑,先处理“取消旧选项”,再处理“勾选新选项”,同时修正你代码里的逻辑错误。

你的代码存在的问题

  1. 逻辑颠倒:隐藏复选标记时应该从FChecked移除索引,显示时才添加,你代码里的Add和Remove写反了
  2. 缺少单选核心逻辑:没有遍历/记录并取消之前已勾选的项

修正后的实现方案

方案1:基于FChecked集合遍历处理(适合原有逻辑延续)

procedure TMainForm.ListView1ItemClick(const Sender: TObject; const AItem: TListViewItem);
var
  I: Integer;
  OldCheckedIdx: Integer;
begin
  // 第一步:清空所有已勾选的项
  while FChecked.Count > 0 do
  begin
    OldCheckedIdx := FChecked[0];
    // 找到对应列表项,隐藏复选标记
    if OldCheckedIdx < ListView1.Items.Count then
    begin
      ListView1.Items[OldCheckedIdx].Objects.AccessoryObject.Visible := False;
    end;
    FChecked.Delete(0);
  end;

  // 第二步:处理当前点击的项
  if not AItem.Objects.AccessoryObject.Visible then
  begin
    // 当前项未勾选,勾选它并记录索引
    AItem.Objects.AccessoryObject.Visible := True;
    FChecked.Add(AItem.Index);
  end
  else
  begin
    // 当前项已勾选,取消勾选(可选逻辑,根据需求决定是否保留)
    AItem.Objects.AccessoryObject.Visible := False;
  end;
end;

方案2:记录上次勾选索引(更高效,避免遍历)

先在窗体类的私有字段中添加:

private
  FLastCheckedIdx: Integer; // 记录上次勾选的项索引,初始值设为-1

然后实现点击事件:

procedure TMainForm.ListView1ItemClick(const Sender: TObject; const AItem: TListViewItem);
begin
  // 点击的是已勾选的项,直接取消
  if AItem.Index = FLastCheckedIdx then
  begin
    AItem.Objects.AccessoryObject.Visible := False;
    FChecked.Remove(AItem.Index);
    FLastCheckedIdx := -1;
    Exit;
  end;

  // 取消之前勾选的项
  if FLastCheckedIdx <> -1 then
  begin
    if FLastCheckedIdx < ListView1.Items.Count then
    begin
      ListView1.Items[FLastCheckedIdx].Objects.AccessoryObject.Visible := False;
      FChecked.Remove(FLastCheckedIdx);
    end;
  end;

  // 勾选当前项并更新记录
  AItem.Objects.AccessoryObject.Visible := True;
  FChecked.Add(AItem.Index);
  FLastCheckedIdx := AItem.Index;
end;

核心逻辑说明

  1. 单选的关键是先取消所有已勾选的项,再处理当前项的勾选状态
  2. 保持FChecked集合和列表项的复选标记状态一致,避免数据和UI不一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:15:57