Некоторые подсказки, которые помогут вам сэкономить много головной боли при работе с данными в ListField
, которые потенциально могут измениться:
- При использовании общего объекта (в данном случае
Vector
) для размещения данных, которые будут обновляться и использоваться ListField
, убедитесь, что вы синхронизируете любой фрагмент кода, который обновляет Vector
. Если вы этого не сделаете, вы, скорее всего, столкнетесь с исключением IndexOutOfBounds, поскольку ListField
не знает, насколько велик Vector
во время его обновления.
- Если то, что вы отображаете, простое, то лучшим решением было бы иметь какой-то боб, имеющий минимальный необходимый минимум для отображения строки. Вы можете выставить своего рода синхронизированный вызов
setItems()
в вашем ListField
, который будет проходить через Вектор и просто сохранять имя (или что-то еще, что вы отображаете) и обновлять размер так, что независимо от того, что вы делаете с ваш вектор, ListField
всегда будет иметь хорошие данные.
В вашем случае вы правы в том, что вам нужно позвонить на setSize(listItem.size());
, чтобы обновить количество элементов в списке. Если вы воспользуетесь моим вторым предложением, то, что вы можете сделать, чтобы удалить все, просто позвоните list.setItems(new Vector());
, и это установит размер на 0, а также очистит сохраненные элементы. В качестве альтернативы, простой вызов list.setSize(0);
будет эмулировать список пустым, потому что он не будет думать, что ему есть что рисовать, поэтому вместо этого будет показана ваша «пустая строка».
Также может быть проблема с вашим методом drawListRow()
, поэтому он не выглядит так, как будто отображается только одна строка. Если вы отправите код из него, мы можем взглянуть на него и сообщить, есть ли потенциальные проблемы.