【问题标题】:Strange characters in ListviewListview中的奇怪字符
【发布时间】:2020-12-29 15:53:15
【问题描述】:

我有一个 Android 项目的代码,用于自动调整 Listview 文本的高度。在固定高度下一切正常。当我激活此代码LText.Height := ListView1.getItemTextHeight(LText)+10; 时,自动高度工作正常,但带有粗体上的奇怪字符,有时还会出现“不允许重复”错误消息。 在 Windows 中工作正常,但在 Android 上我有这个。

    for i := 0 to FDMemTable1.RecordCount -1 do
      begin
        UName := (FDMemTable1.FieldByName('username').Value);
        Descr := (FDMemTable1.FieldByName('descr').Value);
        Ext := (FDMemTable1.FieldByName('ext').Value);
        Url := (FDMemTable1.FieldByName('vurl').Value);
        FCanUpdate := False;
        LItem := ListView1.Items.Add;
        LItem.Data['UName'] := UName;
        LItem.Data['Descr'] := Descr;
        LItem.Data['Ext'] := Ext;
        LItem.Data['Url'] := Url;
        FCanUpdate := True;
        LItem.Adapter.ResetView(LItem);
        FDMemTable1.Next;
      end;
    ListView1.EndUpdate;
end;

procedure TForm7.ListView1UpdatingObjects(const Sender: TObject;
  const AItem: TListViewItem; var AHandled: Boolean);
var
  h: integer;
  LText: TListItemText;
begin
  h := 2;
  LText := AItem.Objects.FindObjectT<TListItemText>('UName_text');
  if LText = nil then
    begin
      LText := TListItemText.Create(AItem);
      LText.Name := 'UName_text';
      LText.PlaceOffset.X := 18;
      LText.PlaceOffset.Y := h;
      LText.TextColor := TAlphaColorRec.Black;
      LText.TextAlign := TTextAlign.Leading;
      LText.TextVertAlign := TTextAlign.Leading;
      LText.Font.Size := 14;
      LText.Font.Style := [TFontStyle.fsBold];
    end;
  LText.Width := (Sender as TListView).Width - 18;
  LText.Text := AItem.Data['UName'].AsString;
  LText.Height := 22;
  h := Round(h + LText.Height +7);

  if AItem.Data['Descr'].AsString <> '' then
  begin
    LText := AItem.Objects.FindObjectT<TListItemText>('Descr_text');
    if LText = nil then
      begin
        LText := TListItemText.Create(AItem);
        LText.Name := 'Descr_text';
        LText.PlaceOffset.X := 18;
        LText.PlaceOffset.Y := h;
        LText.TextColor := TAlphaColorRec.Black;
        LText.TextAlign := TTextAlign.Leading;
        LText.TextVertAlign := TTextAlign.Leading;
        LText.WordWrap := True;
        LText.Font.Size := 13;
        LText.Font.Style := [];
      end;
    LText.Width := (Sender as TListView).Width - 20;
    LText.Text := AItem.Data['Descr'].AsString;

//    LText.Height := ListView1.getItemTextHeight(LText)+10;

    LText.Height := 30;

    h := Round(h + LText.Height + 5);
  end;
  AItem.Height := h;
  AHandled := True;
end;

我手机的截图。

这是怎么回事???

【问题讨论】:

    标签: listview delphi height firemonkey


    【解决方案1】:

    我发现这段代码有问题。 我将此过程称为 TThread.CreateAnonymousThread。 当我删除这一切都很好。我发布了正确的代码以使用代码创建 ListView 项目(在本例中为 2 个文本和 1 个来自 url 的图像)。

    procedure TForm9.LVC;
    var
      i, TLikes, LVIHeight, ImgH, ImgW: integer;
      UName, Descr, Ext, ThumbUrl, Url: UnicodeString;
      LItem : TListViewItem;
    begin
      RESTRequest1.Execute;
      FDMemTable1.First;
      for i := 0 to FDMemTable1.RecordCount -1 do
    begin
      UName := FDMemTable1.FieldByName('username').Value;
      Descr := FDMemTable1.FieldByName('descr').Value;
      Ext := FDMemTable1.FieldByName('ext').Value;
      ThumbUrl := FDMemTable1.FieldByName('image_url').Value;
      Url := FDMemTable1.FieldByName('vurl').Value;
      TLikes := FDMemTable1.FieldByName('TotalLikes').Value;
      if FDMemTable1.FieldByName('imgh').Value <>  '' then
        begin
          ImgH := StrToInt(FDMemTable1.FieldByName('imgh').Value);
          ImgW := StrToInt(FDMemTable1.FieldByName('imgw').Value);
          LVIHeight := round((ListView1.Width / ImgW) * ImgH);
        end
      else
        begin
          ImgH := 0;
          ImgW := 0;
          LVIHeight := 0;
        end;
      ListView1.BeginUpdate;
        FCanUpdate := False;
        LItem := ListView1.Items.Add;
        LItem.Data['UName'] := UName;
        LItem.Data['Descr'] := Descr;
        LItem.Data['Ext'] := Ext;
        LItem.Data['ThumbUrl'] := ThumbUrl;
        LItem.Data['Url'] := Url;
        LItem.Data['Likes'] := TLikes;
        LItem.Data['ImgH'] := ImgH;
        LItem.Data['ImgW'] := ImgW;
        LItem.Data['LVIHeight'] := LVIHeight;
        FCanUpdate := True;
        LItem.Adapter.ResetView(LItem);
      ListView1.EndUpdate;
      FDMemTable1.Next;
    end;
    end;
    
    procedure TForm9.FormCreate(Sender: TObject);
    begin
      FCanUpdate := True;
    end;
    
    procedure TForm9.FormShow(Sender: TObject);
    begin
       LVC;
    end;
    
    procedure TForm9.ListView1UpdatingObjects(const Sender: TObject;
      const AItem: TListViewItem; var AHandled: Boolean);
    var
      h: integer;
      LText: TListItemText;
      LImage: TListItemImage;
      LImageURL: String;
      foto : TBitmap;
    begin
      if not FCanUpdate then
        Exit;
    
      h := 2;
      LText := AItem.Objects.FindObjectT<TListItemText>('UName_text');
      if LText = nil then
       begin
         LText := TListItemText.Create(AItem);
         LText.Name := 'UName_text';
         LText.PlaceOffset.X := 18;
         LText.PlaceOffset.Y := h;
         LText.TextColor := TAlphaColorRec.Black;
         LText.TextAlign := TTextAlign.Leading;
         LText.TextVertAlign := TTextAlign.Leading;
         LText.Font.Size := 14;
         LText.Font.Style := [TFontStyle.fsBold];
       end;
      LText.Width := (Sender as TListView).Width - 18;
      LText.Text := AItem.Data['UName'].AsString;
      LText.Height := 22;
      h := Round(h + LText.Height +7);
    
      if AItem.Data['ThumbUrl'].AsString <> '' then
      begin
        LImage := AItem.Objects.FindObjectT<TListItemImage>('MImage');
        if LImage = nil then
        begin
          LImage := TListItemImage.Create(AItem);
          LImage.Name := 'MImage';
          LImage.Bitmap:=Nil;
          LImage.Align := TListitemalign.Leading;
          LImage.VertAlign := TListItemAlign.Leading;
          LImage.ScalingMode := TImageScalingMode.StretchWithAspect;
          LImage.PlaceOffset.X := 0;
          LImage.PlaceOffset.Y := h;
          LImage.Bitmap := TBitmap.Create;
          LImage.OwnsBitmap := True;
          LImage.Visible := True;
        end;
        LImage.Width := ListView1.Width;
        LImage.Height := AItem.Data['LVIHeight'].AsInteger;
        LImageURL := AItem.Data['ThumbUrl'].AsString;
          TThread.CreateAnonymousThread(
             procedure
                begin
                  foto := TBitmap.Create;
                  fnLoadImgFromUrl(LImageURL, foto);
                  LImage.OwnsBitmap := True;
                  LImage.Bitmap := foto;
                end).Start;
        h := Round(h + LImage.Height + 5);
      end;
    
      if AItem.Data['Descr'].AsString <> '' then
      begin
        LText := AItem.Objects.FindObjectT<TListItemText>('Descr_text');
        if LText = nil then
          begin
            LText := TListItemText.Create(AItem);
            LText.Name := 'Descr_text';
            LText.PlaceOffset.X := 18;
            LText.PlaceOffset.Y := h;
            LText.TextColor := TAlphaColorRec.Black;
            LText.TextAlign := TTextAlign.Leading;
            LText.TextVertAlign := TTextAlign.Leading;
            LText.WordWrap := True;
            LText.Font.Size := 13;
            LText.Font.Style := [];
          end;
        LText.Width := (Sender as TListView).Width - 20;
        LText.Text := AItem.Data['Descr'].AsString;
        LText.Height := ListView1.getItemTextHeight(LText)+10;
        h := Round(h + LText.Height + 5);
      end;
      AItem.Height := h;
      AHandled := True;
    end;
    

    【讨论】:

      猜你喜欢
      • 2014-10-03
      • 2010-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      相关资源
      最近更新 更多