Как получить значение из динамически генерируемого поля редактирования в Blackberry
Мне нужно генерировать пользовательский интерфейс динамически во время выполнения. Я могу сгенерировать компонент, но моя проблема в том, как получить значение, введенное в динамически генерируемое поле?
Я делаю что-то вроде этого.
final HorizontalFieldManager hfm = new HorizontalFieldManager();
for (int i=0; i<5; i++)
{
hfm.add(new EditField());
}
Есть ли способ установить тег поля и позже мы могли бы найти контроль по тегу?
4 ответа
Насколько я знаю, нет способа установить уникальный идентификатор для EditField. Может быть, вы можете использовать его подкласс и реализовать свой собственный уникальный механизм идентификатора. Или, поскольку ваш HorizontalFieldManager содержит только EditField, вы можете получить поле по позиции и привести его к EditField. Как это:
Field f = hfm.getField(index);
EditField ef = (EditField)f;
ОБНОВИТЬ:
public class MyEditField extends EditField {
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()); } }
}
И тогда вы можете сделать так:
MyHfm hfm = new MyHfm(); hfm.add(new MyEditField(0)); hfm.add(new MyEditField(1)); //get the field with id EditField f = hfm.getById(1);
Существуют и другие методы удаления / добавления, не забудьте обработать кеш внутри них.
Используйте Field.setCookie(Object) и Field.getCookie(), чтобы установить и получить файл cookie для поля. Вы можете использовать это, чтобы соответствовать полю редактирования, как вы хотите.
Вы можете попробовать вот так
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
}
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());
}
}
}