Если вы понаблюдаете дальше, то обнаружите что выполняется гораздо больше раз. Попробуйте к примеру повернуть устройство горизонтально, потом опять вертикально - еще пара выполнений.
OnUpdateObjects и OnUpdatingObjects выполняется постоянно - при изменении размеров, скрытии и повторном показе, переключении приложений и т.д. В справке так и написано "Occurs immediately after the list view component is updated."
Так что надо придерживаться двух правил :
1. При добавлении/изменении TListViewItem отключайте обработку вышеуказанных процедур.
Setting.Flags.ListViewUpdating:=True; // Глобальная переменная или ListView.OnUpdatingObjects:=nil;
AItem:=ListView.Items.Add;
AItem.Data['Type']:='MySuperPuperItem';
AItem.Data['Name']:=AName;
AItem.Data['Value']:=AValue;
Setting.Flags.ListViewUpdating:=False; // Глобальная переменная или ListView.OnUpdatingObjects:=ListViewUpdatingObjects;
AItem.Adapter.ResetView(AItem); // принудительно вызываем ListViewUpdatingObjects
...
procedure TFormMain.ListViewUpdatingObjects(const Sender: TObject;
const AItem: TListViewItem; var AHandled: Boolean);
begin
if Setting.Flags.ListViewUpdating then // Если используете глобальную переменную
Exit;
...
2. Внутри OnUpdateObjects и OnUpdatingObjects при добавлении TListItemText и прочих элементов, проверяйте их существование, возможно они уже были добавлены вашим кодом ранее.