Изменить изображение элемента ListView во время выполнения (firemonkey)

Мне нужна возможность, чтобы пользователь нажимал и устанавливал флажок элемента ListView независимо от нажатия на элемент. Если они нажмут на флажок, я добавлю / сниму флажок и предприму некоторые действия. Если они нажимают на текст пункта, я могу предпринять другое действие.

Я могу сделать это с ListBox без проблем со встроенной функциональностью. Я не могу понять, как это сделать с помощью ListView. Как это сделать?

Я могу поместить следующий код в ListView1ItemClickEx, чтобы знать, когда пользователь нажимает на изображение. Может быть, я могу просто поменять изображение на галочку?

  if (ItemObject->Name == "I") {
     ShowMessage("Item Image clicked");
  }

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

Картинка ниже для наглядности. Нажатие в любом месте в красном поле изменит пункт флажки. Для ListBox щелчок в любом месте синего поля вызовет событие OnClick и не изменит флажок. Я хочу такое же поведение в ListView.

1 ответ

Решение

Хорошо, Реми ответил на этот связанный вопрос, и он помог мне решить эту проблему. Теперь я могу сделать так, чтобы в ListView был установлен флажок, аналогичный функции ListBox. Я делаю это, переключая изображение элемента всякий раз, когда пользователь нажимает (или щелкает) область изображения элемента.

Когда пользователь щелкает изображение элемента, я перехватываю его (в соответствии с кодом Реми в событии ListView1ItemClickEx) и переключаю его с 0->1 или 1->0 в векторе на ссылку ItemIndex (например, myVector[ItemIndex] = 0), а затем полностью перестроить ListView (очистить его и построить с нуля).

Я подумал, что мне нужно вспомнить, где в списке, который я прокручивал до и после обновления ListView, мне нужно было прокрутить до этой точки в коде - но это не так. Я не знаю почему, но после обновления я все еще в той точке списка, где я щелкнул изображение элемента. Это заставляет это работать и чувствовать точно как флажок.

Отлично работает в iOS, Android и Windows.

ps Я забыл упомянуть, что вам нужно обращаться с любыми заголовками так, как будто они являются элементами в вашем векторе, которые идут в ногу с изображением каждого элемента (0 или 1). В противном случае добавление заголовков приводит к потере синхронизации, а нажатие на изображение элемента переключит изображение другого элемента.

Другие вопросы по тегам