Как получить ценность от динамически генерированного Editfield в Blackberry
-
27-10-2019 - |
Вопрос
Мне нужно динамически генерировать компонент пользовательского интерфейса во время выполнения. Я могу генерировать компонент, но моя проблема в том, как получить значение, введенное в динамически сгенерированное поле?
Я делаю что -то подобное.
final HorizontalFieldManager hfm = new HorizontalFieldManager();
for (int i=0; i<5; i++)
{
hfm.add(new EditField());
}
Есть ли способ установить тег поля, а позже мы могли бы найти контроль по тегу?
Решение
Насколько я знаю, нет никакого способа установить уникальный идентификатор для 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 расширяет 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 (объект) а также Field.getCookie () Чтобы установить и получить печенье на поле. Вы можете использовать это, чтобы соответствовать поле редактирования так, как вы хотите.
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());
}
}
}
Вы можете попробовать
Editfield ef = new Editfield();
add(ef);
ef.setcookie("Here you can set object with specific value");
ef.setchangelistner(this);
и в функции Listner изменения поля
public void fieldChanged(Field field, int context) {
object ob = field.getcookie();
// compare this ob and give appropriate actionss
}