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

Вопрос

  • Модераторы

Добрый день!

 

Установил XE8, открыл проект собранный на XE7

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

 

а ошибка что в названии появилась откуда не ждал, есть TListView, заполняется динамически

1-зачение добавляем

 ListView1.ClearItems;
  with ListView1.Items.Add do
  begin
    Text := 'KCell';
    Bitmap.LoadFromFile(TPath.Combine(TPath.GetDocumentsPath, 'kcell.png'));
    Tag := 3;
  end;
  with ListView1.Items.Add do
  begin
    Text := 'Activ';
    Bitmap.LoadFromFile(TPath.Combine(TPath.GetDocumentsPath, 'activ.png'));
    Tag := 391;
  end;
  with ListView1.Items.Add do
  begin
    Text := 'Tele2';
    Bitmap.LoadFromFile(TPath.Combine(TPath.GetDocumentsPath, 'tele2.png'));
    Tag := 125;
  end;
  with ListView1.Items.Add do
  begin
    Text := 'Pathword';
    Bitmap.LoadFromFile(TPath.Combine(TPath.GetDocumentsPath, 'pathword.png'));
    Tag := 73;
  end;
  with ListView1.Items.Add do
  begin
    Text := 'Beeline';
    Bitmap.LoadFromFile(TPath.Combine(TPath.GetDocumentsPath, 'beeline.png'));
    Tag := 90;
  end;
  with ListView1.Items.Add do
  begin
    Text := 'ДОС';
    Bitmap.LoadFromFile(TPath.Combine(TPath.GetDocumentsPath,
      'beeline-dos.png'));
    Tag := 578;
  end;
  with ListView1.Items.Add do
  begin
    Text := 'Dalacom';
    Bitmap.LoadFromFile(TPath.Combine(TPath.GetDocumentsPath, 'dalacom.png'));
    Tag := 12;
  end;
  with ListView1.Items.Add do
  begin
    Text := 'City';
    Bitmap.LoadFromFile(TPath.Combine(TPath.GetDocumentsPath, 'city.png'));
    Tag := 134;
  end;
  with ListView1.Items.Add do
  begin
    Text := 'ALTEL 4G';
    Bitmap.LoadFromFile(TPath.Combine(TPath.GetDocumentsPath, 'altel4g.png'));
    Tag := 716;
  end;
  with ListView1.Items.Add do
  begin
    Text := 'АО "Казахтелеком"';
    Bitmap.LoadFromFile(TPath.Combine(TPath.GetDocumentsPath, 'telecom.png'));
    Tag := 0;
  end;

2-значение

ListView1.ClearItems;
  with ListView1.Items.Add do
  begin
    Text := 'ALTEL 4G';
    Bitmap.LoadFromFile(TPath.Combine(TPath.GetDocumentsPath, 'altel4g.png'));
    Tag := 716;
  end;
  with ListView1.Items.Add do
  begin
    Text := 'JET';
    Bitmap.LoadFromFile(TPath.Combine(TPath.GetDocumentsPath, 'jet.png'));
    Tag := 484;
  end;
  with ListView1.Items.Add do
  begin
    Text := '"Интернет Дома" от Beeline';
    Bitmap.LoadFromFile(TPath.Combine(TPath.GetDocumentsPath,
      'internetdoma.png'));
    Tag := 413;
  end;

моделируем ситуацию

если грузим 1 значение и тыкаем (выделяем) на последний или больший 2 itemindex

затем выполняем 2 значение, то выскакивает

argument out of range

т.е. получается ItemIndex или Selected Item не сбрасывается.

 

как эту ошибку исправить?

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

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

  • 0
  • Модераторы

Что никто в проектах не использует TListView?

Хотя бы кто нить Скиньте FMX.Listview.pas сам ошибку исправлю

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

Попробуй добавить BeginUpdate, EndUpdate. 

ListView1.ClearItems;
ListView1.BeginUpdate;
  with ListView1.Items.Add do
  ....
    Tag := 413;
  end;
ListView1.EndUpdate;

Если не поможет, попробуй без Bitmap.LoadFromFile. У меня похожий код работает и на XE7 и на XE8. Подобную ошибку получал, когда картинки не успевали подгружаться в потоке (правда я их подгружал не с диска, а из интернета).

Изменено пользователем enatechno
Ссылка на комментарий
  • 0
  • Модераторы

Это с картинками не связано, в другом проекте тажа ошибка...

ты в каком событии перезаполняешь листвью? если в OnItemClick то и будет такая ошибка потому что там нельзя чистить и перезаполнять значения.

Да хоть в баттоне сделать код, какая разница? Я же написал что они вызываются из другого компонента из TListBox

На счёт Begin/EndUpdate попробую...

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

ты в каком событии перезаполняешь листвью? если в OnItemClick то и будет такая ошибка потому что там нельзя чистить и перезаполнять значения. 

Для ListView я использовал OnChange (как и ты здесь). Но сейчас для перегружаемого списка я использую ListBox и его OnItemClick (в Android список нормально перегружается).

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

В ListView ошибка была в ListBox не знаю. Да и вообще, зачем сразу переходить на 8? никто вас не тянет же за хвост туда :) пускай народ оттестирует, выпустят sp1 вот тогда и можно будет переходить в ожидании xe9.

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

В ListView ошибка была в ListBox не знаю. Да и вообще, зачем сразу переходить на 8? никто вас не тянет же за хвост туда :) пускай народ оттестирует, выпустят sp1 вот тогда и можно будет переходить в ожидании xe9.

Такой вопрос: то есть, ты в ListView загружаешь данные, потом на ItemClick клик очищаешь Этотже ListView и добавляешь новые данные?

Изменено пользователем zairkz
Ссылка на комментарий
  • 0
  • Модераторы

 

В ListView ошибка была в ListBox не знаю. Да и вообще, зачем сразу переходить на 8? никто вас не тянет же за хвост туда :) пускай народ оттестирует, выпустят sp1 вот тогда и можно будет переходить в ожидании xe9.

Такой вопрос: то есть, ты в ListView загружаешь данные, потом на ItemClick клик очищаешь Этотже ListView и добавляешь новые данные?

 

да, но ItemClick не ListView, а ListBox'a!!

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

Что то я по описанию не увидел проблему, сделал проект такой же все работает TestLV

 

Вызываю очищение и добавления ListView по нажатию ListBoxItem'a.

while ListView1.ItemCount>0 do ListView1.Items.Delete(0);

 

ListView1.BeginUpdate;
   for i := 0 to 50 do ListView1.Items.Insert(0).Text:='Text - '+i.ToString;
ListView1.EndUpdate;

 

На счет удаления из ListView компонента по нажатию, то есть из самого себя, есть проблемка, не сбрасывается ссылка на Item, пришлось обходить её через таймер (1 мс) ;)

Сохраняю Aitem.index в глобальную переменную и по таймеру удаляю Итем по индексу, потом выключаем таймер. Незнаю на сколько это правильно, но все работает и меня устраивает. В проекте выше есть

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

Может кому будет полезен опыт граблей.

Я столкнулся с такой же проблемой. В динамически создаваемых фреймах (Несет нагрузку графического оформления для каждого элемента ListBox) был (забыт на форме) компонент GestureManager. Естественно он там не нужен.

Изменено пользователем Станислав Менинник
Ссылка на комментарий

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

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

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

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

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

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

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

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

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