Вместо использования набора полей LabelFields, которые обычно не принимают события фокуса или нажатия, почему бы не использовать ListField на экране? Кажется, это больше того, что вы ищете.
Если вы хотите использовать подход LabelField, вам нужно сделать несколько вещей. Во-первых, когда вы создаете LabelField, используйте стиль Field.FOCUSABLE
, чтобы он принимал фокус:
LabelField shops = new LabelField(shoppingList, Field.FOCUSABLE);
Теперь, поскольку поле LabelField не будет вызывать прослушиватель изменений, если вы его настроите, вам нужно будет прослушивать события нажатия и нажатия клавиш в его родительском менеджере. Поскольку эти события щелчка или клавиши могут относиться к любому полю в диспетчере, вам нужно проверить, какое поле находится в фокусе, когда происходит событие, и запустить любой соответствующий обработчик на основе поля в фокусе.
Пример кода:
VerticalFieldManager vfmListRow = new VerticalFieldManager() {
protected boolean navigationClick(int status, int time) {
Field field = getFieldWithFocus();
if (field != null && field.equals(shops)) {
System.out.println("shops field clicked");
return true;
}
return super.navigationClick(status, time);
}
protected boolean keyChar(char key, int status, int time) {
Field field = getFieldWithFocus();
if (key == Characters.ENTER && field != null && field.equals(shops)) {
System.out.println("shops field clicked");
return true;
}
return super.keyChar(key, status, time);
}
};