Индекс не обновляется в методе 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);