Перейти к содержанию
Fire Monkey от А до Я
  • 0

ListView задать размер скроллбара


Mars M

Вопрос

Загружаю большой список в ListView, время загрузки где то 5-7 секунд.

Это много, по этому переделал что бы список загружался динамически, как к концу пролистывается, подгружаются новые данные.

Все бы хорошо, но вот ScrollBar при загрузке новых данных меняет размер и позицию. 

Это не очень нравиться :)

Можно как то заранее настроить его размер под конечное число итемов?

Или может как то по другому сделать.

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
В 24.04.2017 в 11:29, Mars M сказал:

Загружаю большой список в ListView, время загрузки где то 5-7 секунд.

Это много, по этому переделал что бы список загружался динамически, как к концу пролистывается, подгружаются новые данные.

Все бы хорошо, но вот ScrollBar при загрузке новых данных меняет размер и позицию. 

Это не очень нравиться :)

Можно как то заранее настроить его размер под конечное число итемов?

Или может как то по другому сделать.

Вы можете поступить следующим образом - сразу создать нужное количество итемов и задать им высоту (или среднюю высоту) готово итема. Это будет очень быстро, по крайней мере для нескольких тысяч итемов время менее секунды на среднем телефоне. А потом динамически наполнять их данными. 

P.S Не забудьте отключить события ListViewUpdatingObjects и ListViewUpdateObjects на время создания итемов.

Изменено пользователем Евгений Корепов
Ссылка на комментарий
  • 0

Сейчас пойдут возможно глупые вопросы :)

Я всегда использовал ListBox, он мне всем нравился, я в нем и рисовал, выводил текст как мне нужно и заполнял разными данными.

Например сделать что то типа такого не составляет никакого труда:

Скрытый текст

2017-04-26_141427.png.c3ac0723d116ec87d379946955739d28.png

 

Но сейчас рекомендуют LIstView и он действительно быстрее, но вот пока только одни сложности с ним, но думаю разберусь :)

1 час назад, Евгений Корепов сказал:

сразу создать нужное количество итемов и задать им высоту (или среднюю высоту) готово итема.

Можно сразу создать необходимое количество пустых итемов или в цикле добавлять по одному?

  ListView1.BeginUpdate;
  for i := 0 to List.Count - 1 do
  begin
     LVItems := ListView1.Items.Add;
     ...
  end;
  ListView1.EndUpdate;

Потому что так у меня тоже достаточно долго добавляются итемы.

Количество строк которые нужно добавлять могут быть очень большими, в данный момент например экспериментирую с 253146 строк.

Вобщем пока я это дело отложил и оставил как есть.

Во первых когда пользователь грузит такой большой файл(текстовый) то он должен понимать что займет какое то время на его обработку.

Во вторых, решил оставить подобные оптимизации на потом, на основную работу программы они все равно не влияют.

 

 

Ссылка на комментарий
  • 0

Во время добавления так же можно отключить обработчики  ListView1.OnUpdatingObjects и(или) ListView1.OnUpdateObject (если у вас в них есть какой либо код).

  ListView1.BeginUpdate;
  ListView1.OnUpdatingObjects:=Nil;
  ListView1.OnUpdateObjects:=Nil;
  for i := 0 to List.Count - 1 do
  begin
     LVItems := ListView1.Items.Add;
	 LVItems.Data['MyData']:=...
     ...
  end;
  ListView1.OnUpdatingObjects:=ListView1UpdateObjects;
  ListView1.OnUpdateObjects:=ListView1UpdatingObjects;
  ListView1.EndUpdate;

 

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...