Слушатели смены поля на этикетке - PullRequest
0 голосов
/ 25 июня 2010

Я извлекаю список объектов из URL-адреса json и отображаю его как список, добавляя поле метки и разделитель. Теперь я хочу сделать каждую метку кликабельной, чтобы каждая метка перенаправлялась на отдельный URL. При нажатии на ярлык должен открыться отдельный экран с данными json соответствующего URL. Итак, кто-нибудь может сказать мне, как этого добиться. Я буду очень признателен, если получу пример кода, как это сделать ... Вот пример кода, который я сделал ...

public VerticalFieldManager showShoppingList(){
        try {
            jsArrShpList=new JSONArray(strShopping);
            totalList= jsArrShpList.length();
            for(int i=0;i<totalList;i++){
                 String strAlert=jsArrShpList.get(i).toString();
                 JSONObject joAlert=new JSONObject(strAlert);
                 String shoppingList = joAlert.get("CategoryName").toString();
                 LabelField shops  = new LabelField(shoppingList);
                 VerticalFieldManager vfmListRow=new VerticalFieldManager();
                 vfmListRow.add(shops);
                 vfmListRow.add(new SeparatorField());
                 vfmShpList.add(vfmListRow);

            }

            return vfmShpList;

1 Ответ

1 голос
/ 25 июня 2010

Вместо использования набора полей 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);
    }
};
...