индекс не обновляется в методе drawListRow - PullRequest
0 голосов
/ 01 ноября 2011

я работаю со списком полей в OS 5.0 и letter.my все данные поступают из веб-сервиса и отображаются в списке полей ... все отлично работает в первый раз во время синтаксического анализа и успешно отображается в списке полей ... если в первый раз у меня есть толькоодна запись, отображаемая в строке, она работает нормально, но я нажимаю на NextButtonfield, чтобы обновить поле списка, я получаю более одной записи, и в поле списка отображается одна запись ..

У меня много отладки и возникают проблемы.. индекс метода drawListRow не увеличен как setSize(listItem.size());.listItem - это вектор, и его обновление успешно зависит от записи.

Так как же обновлять индекс в зависимости от размера вектора?или как удалить все строки во время обновления?

Ответы [ 2 ]

2 голосов
/ 01 ноября 2011

Некоторые подсказки, которые помогут вам сэкономить много головной боли при работе с данными в ListField, которые потенциально могут измениться:

  • При использовании общего объекта (в данном случае Vector) для размещения данных, которые будут обновляться и использоваться ListField, убедитесь, что вы синхронизируете любой фрагмент кода, который обновляет Vector. Если вы этого не сделаете, вы, скорее всего, столкнетесь с исключением IndexOutOfBounds, поскольку ListField не знает, насколько велик Vector во время его обновления.
  • Если то, что вы отображаете, простое, то лучшим решением было бы иметь какой-то боб, имеющий минимальный необходимый минимум для отображения строки. Вы можете выставить своего рода синхронизированный вызов setItems() в вашем ListField, который будет проходить через Вектор и просто сохранять имя (или что-то еще, что вы отображаете) и обновлять размер так, что независимо от того, что вы делаете с ваш вектор, ListField всегда будет иметь хорошие данные.

В вашем случае вы правы в том, что вам нужно позвонить на setSize(listItem.size());, чтобы обновить количество элементов в списке. Если вы воспользуетесь моим вторым предложением, то, что вы можете сделать, чтобы удалить все, просто позвоните list.setItems(new Vector());, и это установит размер на 0, а также очистит сохраненные элементы. В качестве альтернативы, простой вызов list.setSize(0); будет эмулировать список пустым, потому что он не будет думать, что ему есть что рисовать, поэтому вместо этого будет показана ваша «пустая строка».

Также может быть проблема с вашим методом drawListRow(), поэтому он не выглядит так, как будто отображается только одна строка. Если вы отправите код из него, мы можем взглянуть на него и сообщить, есть ли потенциальные проблемы.

0 голосов
/ 02 ноября 2011

Нашел решение из этой статьи блога :

Я нашел работающее решение - удалить элемент управления ListField из его менеджера, установить для него значение null и повторно инициализировать его.

Не лучшее решение, но в настоящее время он работает только для меня:

Manager.delete(ListField);
ListField = null;
ListField = FillListWithItems();

Manager.add(ListField);
...