Blackberry - получить все дочерние поля управления - PullRequest
0 голосов
/ 31 августа 2009

У меня есть один менеджер горизонтального поля. Я добавляю некоторые компоненты во время выполнения. Я хочу знать, какие компоненты я поместил в горизонтальный менеджер поля. Может ли кто-нибудь дать мне представление о том, какие компоненты присутствуют в горизонтальный полевой менеджер. С уважением, s.kumaran.

Ответы [ 2 ]

4 голосов
/ 31 августа 2009

+ 1 января, а как быть с внутренними менеджерами? Некоторая рекурсия сработает.

class Scr extends MainScreen implements FieldChangeListener {
    HorizontalFieldManager mMainPanel;
    VerticalFieldManager mVerticalPanel;
    ButtonField mPrintButton;

    public Scr() {
        add(new LabelField("Title", FIELD_HCENTER));
        mMainPanel = new HorizontalFieldManager();
        add(mMainPanel);
        mVerticalPanel = new VerticalFieldManager();
        mMainPanel.add(mVerticalPanel);
        for (int i = 0; i < 5; i++) {
            HorizontalFieldManager hfm = new HorizontalFieldManager();
            hfm.add(new LabelField("Label " + i, FIELD_LEFT));
            hfm.add(new BasicEditField(FIELD_RIGHT));
            mVerticalPanel.add(hfm);
        }
        mPrintButton = new ButtonField("Print Console All Fields",
                ButtonField.CONSUME_CLICK | FIELD_HCENTER);
        mPrintButton.setChangeListener(this);
        add(mPrintButton);
    }

    private Field[] getAllFields(Manager manager) {
        int cnt = manager.getFieldCount();
        Field[] result = new Field[cnt];

        for (int i = 0; i < cnt; i++) {
            Field field = manager.getField(i);
            result[i] = field;

            if (field instanceof Manager) {
                Field[] childFields = getAllFields((Manager) field);
                result = appendArray(result, childFields);
            }
        }
        return result;
    }

    private Field[] appendArray(Field[] target, Field[] source) {
        for (int i = 0; i < source.length; i++) {
            Arrays.add(target, source[i]);
        }
        return target;
    }

    public void fieldChanged(Field field, int context) {
        if (mPrintButton == field) {
            Field[] fields = getAllFields(getMainManager());
            for (int i = 0; i < fields.length; i++) {
                System.out.print("\nN " + i + "; Class: "
                        + fields[i].getClass().getName());
            }
        }
    }
}
1 голос
/ 31 августа 2009

Примерно так должно работать:

public Field[] getFieldsOfManager(Manager manager) {
    Field[] fields = new Field[manager.getFieldCount()];
    for( int i = 0; i < manager.getFieldCount(); i++ )
    {
        fields[i] = manager.getField( i );        
    }
    return fields;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...