Как получить значение из динамически генерируемого поля редактирования в Blackberry - PullRequest
0 голосов
/ 03 декабря 2011

Мне нужно динамически генерировать компонент пользовательского интерфейса во время выполнения.Я могу сгенерировать компонент, но моя проблема в том, как получить значение, введенное в динамически генерируемое поле?

Я делаю что-то вроде этого.

    final HorizontalFieldManager hfm = new HorizontalFieldManager();

    for (int i=0; i<5; i++)
    {
        hfm.add(new EditField());
    }

Есть ли способ установитьтег поля и позже мы могли бы найти контроль по тегу?

Ответы [ 4 ]

3 голосов
/ 04 декабря 2011

Используйте Field.setCookie (Object) и Field.getCookie () , чтобы установить и получить файл cookie для поля.Вы можете использовать это, чтобы соответствовать полю редактирования так, как вы хотите.

1 голос
/ 04 декабря 2011

Вы можете попробовать вот так

Editfield ef = new Editfield();
add(ef);
ef.setcookie("Here you can set object with specific value");
ef.setchangelistner(this);

и в функции списка изменений полей

public void fieldChanged(Field field, int context) {
    object ob = field.getcookie();
    // compare this ob and give appropriate actionss
}
1 голос
/ 03 декабря 2011

Насколько я знаю, нет способа установить уникальный идентификатор для EditField.Может быть, вы можете использовать его подкласс и реализовать свой собственный уникальный механизм идентификатора.Или, поскольку ваш HorizontalFieldManager содержит только EditField, вы можете получить поле по позиции и привести его к EditField.Например:

Field f = hfm.getField(index);
EditField ef = (EditField)f;

ОБНОВЛЕНИЕ:

public class MyEditField extends EditField {</p> <pre><code>private int _id; public MyEditField(int id) { _id = id; } public int getID() { return _id; }

}

класс MyHfm extends HorizontalFieldManager {

    //This is a cache, which holds all EditFields.



private IntHashtable _editfields = new IntHashtable ();

    public EditField getById(int id) {
        EditField ef = (EditField)_editfields.get(id);
        return ef;
}

    public void add(Field f) {
        super.add(f);
        if (f instanceof MyEditField) {
            _editfields.put(((MyEditField)f).getID(), f);
        }
    }

    public void delete(Field f) {
        super.delete(f);
        if (f instanceof MyEditField) {
            _editfields.remove(((MyEditField)f).getID());
        }
    }

}

И тогда вы можете сделать так: </p> <pre><code> MyHfm hfm = new MyHfm(); hfm.add(new MyEditField(0)); hfm.add(new MyEditField(1)); //get the field with id EditField f = hfm.getById(1);

Существуют и другие методы удаления / добавления, не забудьте обработать кэш внутри них.

1 голос
/ 03 декабря 2011
EditField[] ef = new EditField[size];//at global in class

// Делаем что-то

VerticalFieldManager vfm = new VerticalFieldManager();
for(int i=0 ;i<size ;i++)
{
    HorizontalFieldManager hfm = new HorizontalFieldManager();
    ef[i] = new EditField();
    hfm.add(ef[i]);
    vfm.add(hfm);
}
add(vfm);

// Завершение создания пользовательского интерфейса

// Начать получать значение из EditField

public void fieldChanged(Field field, int context) {
    super.fieldChanged(field, context);
    for(int i=0;i<size;i++)
    {
        if (field.equals(ef[i]) {
            system.out.println("Value from editfield :- " + ef[i].getText());
        }
    }
}
...