• 0
Yarpda

Вопрос по быстродействию TListBox

Вопрос

(почему-то нет ветки в андроид по производительности, поэтому написал сюда)

 

Пробую писать под FM на Андрод и столкнулся с жуткими тормозами при прокрутке в TListBox.

Динамически создаю TListBoxitem'ы и закидываю в каждый итем 4 Tlabel'я разных цветов методом MyListBoxItem.AddObject(MyLabel);

И так для каждого Итема. Если список  из 5-10 итемов прокручивается еще куда ни шло. Но список из 25 итемов  и более просто дико тормозит при прокрутке. 

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

и на производительность FM для Андроид в общем?

Заранее спасибо.

HarrisNuh понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

12 ответов на этот вопрос

  • 0

Для таких целей просто нужно использовать TListView. ListBox будет тормозить, он не создан для больших списков.

Для вас отлично подойдет MultiDetailView. Он в Samples лежит.

Brovin Yaroslav понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Вообще не правильный метод вы выбрали! Делается это через Стили и данные присваиваются через StyleData[...]

Создайте свой стиль, разместите в нем компоненты и дайте им имена. Уверен будет намного лучше.

прочитайте про стили в FMX

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Вообще не правильный метод вы выбрали! Делается это через Стили и данные присваиваются через StyleData[...]

Создайте свой стиль, разместите в нем компоненты и дайте им имена. Уверен будет намного лучше.

прочитайте про стили в FMX

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Вообще не правильный метод вы выбрали! Делается это через Стили и данные присваиваются через StyleData[...]

Создайте свой стиль, разместите в нем компоненты и дайте им имена. Уверен будет намного лучше.

прочитайте про стили в FMX

Все равно будет дико тормозить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

не знаю у меня и 100 итемов не  тормозят , плюс на них кнопки прогресс бары и проч 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

100 итемов в ListBoxe с картинками и не тормозит при быстром скроле?

Ну и речь офк идет о мобильных платформах.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

100 итемов в ListBoxe с картинками и не тормозит при быстром скроле?

Ну и речь офк идет о мобильных платформах.

Да, именно о обильных, под Win все ОК.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Я к тому, что не очень верится что на мобилках стилизованный листбокс с картинками со 100 итемами не тормозит при скролле. А не верится потому, что пробовал. Под настольные ПК понятное дело не тормозит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

 

Вообще не правильный метод вы выбрали! Делается это через Стили и данные присваиваются через StyleData[...]

Создайте свой стиль, разместите в нем компоненты и дайте им имена. Уверен будет намного лучше.

прочитайте про стили в FMX

Все равно будет дико тормозить.

 

Андроид телефон Samsung Note 4 и на s3 проверял проверил 400 записей с картинками и всем тем что описал выше ,полет нормальный, а вот когда побывал использовать TreeView то он жутко тормозил даже с 10 записями, может все дело в коде?? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Подтверждаю, тормоза есть, даже при 25 записях (со стандартным стилем). Устройство указано в подписи, проц далеко не слабый...

Что я заметил, так это 4 бага в листбоксе и тормоза(всё в XE7 без апдейта), в XE5-XE6 тормозов не было, это хорошо видно например здесь (20 секунда, вначале подлагнул скролл, а потом всё как по маслу (подгружалось более 500 записей/итемов), сейчас постоянно так подлагивает скролл).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Подтверждаю, тормоза есть, даже при 25 записях (со стандартным стилем). Устройство указано в подписи, проц далеко не слабый...

Что я заметил, так это 4 бага в листбоксе и тормоза(всё в XE7 без апдейта), в XE5-XE6 тормозов не было, это хорошо видно например здесь (20 секунда, вначале подлагнул скролл, а потом всё как по маслу (подгружалось более 500 записей/итемов), сейчас постоянно так подлагивает скролл).

попробуйте скролл отключить ,  скролл у меня отключен, и все лишние отключено, все равно код нужен, непонятно как изображения подгружаются , в xe 7 кэширование стилей есть , фото у меня в  StyleBook   Bitmap := GetImage('image'+inttostr(i)+'style'); без кода ответа точно не буде, код и пример приложите

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Похожие публикации

    • Автор: om.pranayama
      Здравствуйте форумчане и профессионалы разработчики.
      Компилирую проект через C++Builder 10.2  под Android
      Появилась следующая проблема при использовании компонента TBitmapListAnimation
      Если приложение свернуть, а затем развернуть - то появляются жуткие глитчи в ввиде чёрных фонов вокруг компонентов, типа TImage, TButton.
      В Windows такая проблема - не наблюдается.
      Попытки вызвать Repaint или даже Invalidate для всей формы - положительного результата не дают.
      Пожалуйста, помогите решить эту проблему.
      //--------------------------------------------------------------------------------------------------------------------------------------------
      ТЕМУ МОЖНО УДАЛЯТЬ
      Причина не в TBitmapListAnimation а в TAniIndicator, который работал совместно с TBitmapListAnimation.
      Приношу извинения за беспокойство. Проблема была в TAniIndicator. Буду разбираться почему он так себя безобразно ведёт.
      Тему можно удалять.
    • Автор: Aptyp
      В приложении:
          procedure TForm7.Button1Click(Sender: TObject);     var AIntent: JIntent;         AServiceName: string;     begin       AIntent := TJIntent.Create;       AServiceName := 'com.embarcadero.services.Service';       AIntent.setClassName( TAndroidHelper.Context.getPackageName(), TAndroidHelper.StringToJString( AServiceName ) );       AIntent.putExtra( TAndroidHelper.StringToJString( 'Code' ), 0 );       AIntent.putExtra( TAndroidHelper.StringToJString( 'Data' ), TAndroidHelper.StringToJString( 'DataString' ) );       TAndroidHelper.Activity.startService( AIntent );     end;
      В сервисе:
          procedure TDM.AndroidIntentServiceCreate(Sender: TObject);     begin       Toast( 'Create' );     end;          procedure TDM.AndroidIntentServiceHandleIntent(const Sender: TObject;       const AnIntent: JIntent);     begin       Toast( 'HandleIntent' );     end; Сообщение 'Create' показывается, а 'HandleIntent' нет. OnCreate срабатывает, но onHandleIntent не вызывается что бы я не делал. Может я что-то не так делаю?
    • Автор: Roman V
      Всем привет. Учусь работать с ini-файлами на Android. И сразу же возникла проблема, которую никак не могу решить. Хотел написать подобие приложение-тест с хранением данных в ini файле. В итоге все отлично работает на windows,а под Андроид при запуске висит только значок firemonkey секунд 10 и приложение вырубается так и не запустившись. В чем может быть проблема? Использую отладку по USB. 
      TIniFile *Ini = new TIniFile(System::Ioutils::TPath::GetDocumentsPath() + PathDelim + "options.ini"); Юзаю эти библиотеки 
      #include <System.IOUtils.hpp> #include <System.IniFiles.hpp>  
    • Автор: gonzales
      Доброго времени суток!
      Решаю следующую задачу, в приложении динамически формируются разные объекты, наследники от одного класса. При формировании объектов заполняется динамический массив этих элементов. Далее я хочу в отдельном потоке для каждого из элементов массива получить его состояние, то есть делаю запрос к серверу. Все это повешено на таймер, каждую секунду должен отрабатываться запрос. Все более менее работает в Windows, а на Андроиде со временем приложение валится. Вот код таймера, для читаемости я удалил куски с различными вариантами E. RootElements - это массив TEssense от которого есть наследники. Функции GetBoardCurrentValue, GetBoardMaxValue - по сути запросы к серверу. 
      Подскажите, правильно ли я оформляю работу с потоками для работы на Андроиде?
      procedure TForm1.MasterTimerTimer(Sender: TObject); begin TTask.Run( procedure var l, d, a: byte; i,j:integer; E: TEssence; p: Pointer; VirtualNode: IXMLNode; VirtualElementNode: IXMLNode; id: byte; begin l := Length(Form1.RoomElements); for j := 0 to l - 1 do begin E := Form1.RoomElements[j]; // Реле if E is TRele then begin d := (E as TRele).Device_ID; a := (E as TRele).Device_Adress; if Form1.GetBoardCurrentValue(d, a) = true then begin TThread.Synchronize(nil, procedure begin (E as TRele).ReleSwitch.IsChecked := Form1.device[d].Board[a].CurrentValue.ToBoolean; end); end; // (E as TRele).ReleOnTimer(E) end // Диммер else if E is TDimmer then begin d := (E as TDimmer).Device_ID; a := (E as TDimmer).Device_Adress; if Form1.GetBoardMaxValue(d, a) = true then begin TThread.Synchronize(nil, procedure begin if (Form1.device[d].Board[a].Type_ID = TType.Светодиод) or (Form1.device[d].Board[a].Type_ID = TType.Диммер220) then begin (E as TDimmer).DimmerValue.Text := (Form1.device[d].Board[a].MaxValue).ToString; end; end); end; // (E as TDimmer).DimmerOnTimer(E) end // Таймер else if E is TSTimer then begin id := (E as TSTimer).STimerIndex; Form1.FillHTTPRequest(0, 0, HTTP_GET_TIMER_INFO, id); if Form1.AnswerIsComming = HTTP_GET_TIMER_INFO then begin TThread.Synchronize(nil, procedure begin if Form1.HTTPAnswer.Data1 = 0 then (E as TSTimer).Interval.Text := 'OFF' else (E as TSTimer).Interval.Text := 'ON' end); end; // (E as TSTimer).STimerOnTimer(E); end; end; end); end;   
    • Автор: andahay
      Доброго времени суток. Есть android приложение, в нем есть диалоговое окно, которое предлагает перейти в google play и скачать другое приложение (pro версию), с 2 кнопками (да/нет). Как реализовать этот переход в Google play, чтобы в нем сразу было загружено нужное приложение. Использую Delphi XE7
    • Автор: zekelive
      Добрый день, друзья. Начал заниматься вопросом описанным в шапке и столкнулся со множеством непонятных для меня проблем. Как примерно должно выглядеть на Рис. ниже. Знаю, что сам список барабан выполнен в TlistBox. Есть хорошая ссылка на блог Ярослава тут. Пошерстил файлы в FMX, и не нашел ключа для своего дела. Может кто занимался этим? Я изначально брал TScrollBox, кидал на него Tlayout и в него TLabel. Но думаю, видимо не то совсем.

    • Автор: zekelive
      Добрый день. Кто знает, подскажите, можно ли средствами firemonkey менять иконку приложения в рантайм либо после закрытия и повторного открытия приложения? На win вроде бы можно, статьи на форуме находил, а для Андроида найти не удалось.
    • Автор: bossalex
      Недавно компилил приложение на Delphi  FMX Android  при обращении  к серверу https при выполнении Get запроса от компонента TIdHttp запросил библиотеку "Could not load SSL library" используется протокол sslvTLSv1_2 в windows все пашет в андроид нет , накопал что можно подключить библиотеки  libssl.so и  libcrypto.so через  deployment .assets\internal , А вот как в коде дальше их использовать никто примерчик не выложил, хоть и обсуждали на интернет просторах 100 раз, те как прикрутить  к IdSSLIOHandlerSocketOpenSSL1.SSLOptions.CertFile. Если есть у кого код выложите пожалуйста? или скинте по email bossalex@ya.ru
      IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method.sslvTLSv1_2;
      IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Mode.sslmUnassigned;
       
    • Автор: zekelive
      Добрый день, друзья. Подскажите, есть ли возможность в firemonkey открыть форму как представлено на картинке ниже? Если да, то подскажите в какую сторону копать. Спасибо.

    • Автор: Аров Марат (Coolmarat)
      Здравствуйте, коллеги.
      При написании клиента под андроид для Datasnap сервера столкнулся с проблемой, что из телефона строки с русскими буквами
      уходят в нечитаемом виде на сервер. При запуске приложения под Windows проблемы нет. Даже тестовые методы, генерируемые
      мастером создания DataSnap сервера (EchoString, ReverseString) не работают с русским текстом при запуске клиента на
      андроиде. Прилагаю тестовые проекты сервера и клиента с вызовом одной только функции ReverseString - у меня все равно
      выходят кракозябры. Помогите разобраться, как правильно передавать строки с русскими буквами.

      DSTestStrAndroidServer.zip
      DSTestStrAndroidClient.zip
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу