Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我怎样才能加快填写此列表框的速度? 问题_Android_Loops_For Loop_Listbox_Firemonkey - Fatal编程技术网

Android 我怎样才能加快填写此列表框的速度? 问题

Android 我怎样才能加快填写此列表框的速度? 问题,android,loops,for-loop,listbox,firemonkey,Android,Loops,For Loop,Listbox,Firemonkey,我有两个不同的json数组,如下所示: 1-事件列表 {“0000:第一个事件名称”、“0001:第二个事件名称”、“0002:第三个事件名称”} 2-可用事件列表 {“0001”,“0002”} 然后我需要使用复选框生成一个包含可用事件的列表框: []第一个事件名称 [x] 第二个事件名称 [x] 第三个事件名称 给定解 过程TFormHome.GetEvents(发送方:TObject); 变量 K:整数; Z:整数; ListCount_事件:整数; 可用列表计数:整数; lb_项

我有两个不同的
json
数组,如下所示:

1-事件列表

{“0000:第一个事件名称”、“0001:第二个事件名称”、“0002:第三个事件名称”}

2-可用事件列表

{“0001”,“0002”}

然后我需要使用复选框生成一个包含可用事件的列表框:


  • []第一个事件名称
  • [x] 第二个事件名称
  • [x] 第三个事件名称

给定解
过程TFormHome.GetEvents(发送方:TObject);
变量
K:整数;
Z:整数;
ListCount_事件:整数;
可用列表计数:整数;
lb_项目:TListBoxItem;
事件代码:字符串;
事件\代码\ 1:字符串;
事件名称:字符串;
开始
//检查JSON响应是否不是nil
如果((json_响应_事件nil)和(json_响应_可用_事件nil)),则
开始
ListCount_Events:=json_response_Events.Count;
//获取可用列表计数
AvailableList_Count:=json_response_available_events.Count;
尝试
//运行for循环以基于ListCount\u事件创建事件
对于K:=0到(ListCount_事件-1)do
开始
//获取完整的事件代码
event_code_1:=StringReplace(json_response_events.Items[K].ToString.Split([':'])[0]、'''''、''[rfReplaceAll]);
//获取完整的事件名称
event_name:=StringReplace(json_response_events.Items[K].ToString.Split([':'])[1]、''''、''、''[rfReplaceAll]);
//创建ListBoxItem
lb_item:=TListBoxItem.Create(self);
//将其分配给ListBox组件
lb_item.Parent:=lb_通知;
//ListBoxItem获取事件名称
lb_item.Text:=事件名称;
//删除样式设置(其他)
lb_item.StyledSettings:=lb_item.StyledSettings-[TStyledSetting.Other];
//删除样式设置(FontColor)
lb_item.StyledSettings:=lb_item.StyledSettings-[TStyledSetting.FontColor];
//将文本设置FontColor更改为默认值
lb_item.TextSettings.FontColor:=$FF626262;
//将selectable(可选)设置为false(假),以不允许用户使用
//选择列表中的多个项目
lb_项。可选:=假;
//设置适当的样式
lb_item.StyleLookup:=“listboxitemleftdetail”;
//运行for循环以检查可用事件
对于Z:=0到(可用列表计数)do
开始
事件代码:=StringReplace(json响应可用的事件。项[Z]。ToString,“,”[rfReplaceAll]);
如果事件代码包含(事件代码),则
开始
如果K

我认为我的代码有味道,我想知道为什么,并学习做得更好

欢迎提出合理的建议

  • Android
    iOS
    上加载列表的时间太长

  • 当可滚动时,它在
    Android
    (但在
    iOS
    )上的速度非常慢


如何加速填写此列表?根据@birger的建议,通过两行简单的代码解决了此问题:

BeginUpdate;
//
GetEvents;
//
EndUpdate;
如果您使用
Delphi
组件,如
ListBox
Memo
、ListView等,并且添加或修改了很多项(行、节点等),则组件的性能会变得非常慢。这是因为每次更改后,它都会在屏幕上重新绘制

BeginUpdate
EndUpdate
在添加、删除或插入项目时防止过度重画并加快处理时间


参考:

添加多个项目时,请在列表框上使用beginupdate/endupdate。否则,它将执行(慢速)更新重新绘制每个新项目。
BeginUpdate/EndUpdate
是一个很好的加速加载的方法,但是在Android上滚动仍然很慢。FireMonkey TListBox的滚动速度很慢,因为它的每个TListBoxItem都是一个控件容器。如果你想在移动设备上滚动时获得更快的性能,请查看TList视图或第三方TListBox。事实上,通过插入项(我的例子中是8000项)beginupdate..endupdate没有帮助。唯一的变化是:表单/组件显示得非常快,插入了一些项,但插入仍在继续,并且您可以看到列表正在增长。效果与您使用“application.processmessages”差不多“但在这种情况下,您可以关闭表单/应用程序,而无需等待插入完成(视觉)。
BeginUpdate;
//
GetEvents;
//
EndUpdate;