Индекс не обновляется в методе drawListRow

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

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

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

2 ответа

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

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

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

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

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

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

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

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

Manager.add(ListField);
Другие вопросы по тегам