Шива, я думаю, что в вашем понимании того, что такое обход, есть некоторый пробел.Позвольте мне объяснить.
Вы можете добавить любое количество элементов в форму.Фреймворк управляет следующим для всех Предметов, встроенных в MIDP
- Позиционирование и рендеринг всех Предметов (ов)
- Прокрутка, когда имеется большее количество элементов, которыеможет помещаться на экране.
- Обработка экранных команд и команд Item.
Но когда вы расширяете CustomItem и реализуете свой собственный элемент, полный контроль находится внутри реализации.Рассмотрим случай, когда форма содержит TextField и CustomItemImpl, и вы хотите переключаться между TextField и CustomItemImpl.Поскольку обработка ключей, обработка команд и рендеринг находятся под контролем CustomItemImpl, должен быть способ, которым фреймворк должен знать, когда вы хотите, чтобы TextField имел элемент управления и когда элемент управления должен быть передан в CustomItemImpl.
Вот где метод traverse () в CustomItem входит. Вы возвращаете false, когда закончите рендеринг и захват данных в CustomItemImpl, и возвращаете true, если хотите сохранить элемент управления в CustomItemImpl.
Позвольте мнеуточни дальше.Предположим, вы реализуете TreeItem.Когда фокус находится на TreeItem, вы хотели бы сделать следующее:
- Выберите узел
- Разверните или сверните узлы
- Перейдите по узлам
Все вышеперечисленные функции являются частью вашей реализации TreeItem.Однако когда вы перемещаете KEY_UP за первый узел дерева или KEY_DOWN за последний узел дерева, вы хотите перейти к TextField / любому другому элементу, смежному с этим TreeItem.Способ, которым вы даете каркасу знать о своем намерении, это
- Возвращать false в методе traverse (), когда выбран KEY_UP, когда фокус находится на первом узле дерева
- Возвращать false вМетод traverse (), когда выбран KEY_DOWN, когда фокус находится на последнем узле дерева.
Надеюсь, это прояснит ваш запрос.Я настоятельно рекомендую вам взглянуть на этот конкретный пример для более конкретной иллюстрации.