Come ottenere valore da Editfield generato dinamicamente in BlackBerry
-
27-10-2019 - |
Domanda
Devo generare un componente dell'interfaccia utente dinamicamente in fase di esecuzione. Sono in grado di generare il componente, ma il mio problema è come inserire il valore nel campo generato dinamicamente?
Sto facendo qualcosa del genere.
final HorizontalFieldManager hfm = new HorizontalFieldManager();
for (int i=0; i<5; i++)
{
hfm.add(new EditField());
}
Esiste un modo per impostare il tag di campo e in seguito potremmo trovare il controllo per tag?
Soluzione
Per quanto ne so, non c'è modo di impostare un ID univoco per un Editfield. Forse puoi usarne una sottogruppo e implementare il tuo meccanismo di ID univoco. Oppure, poiché il tuo orizzontalfieldManager non tiene altro che Editfield, puoi ottenere un campo per posizione e lanciarlo su Editfield. Come questo:
Field f = hfm.getField(index);
EditField ef = (EditField)f;
AGGIORNARE:
public class MyEditField extends EditField {
private int _id;
public MyEditField(int id) {
_id = id;
}
public int getID() {
return _id;
}
}
Class MyHFM estende 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());
}
}
}
E poi puoi fare così:
MyHfm hfm = new MyHfm();
hfm.add(new MyEditField(0));
hfm.add(new MyEditField(1));
//get the field with id
EditField f = hfm.getById(1);
Ci sono altri metodi Elimina/Aggiungi, ricorda di gestire la cache al loro interno.
Altri suggerimenti
Uso Field.setcookie (oggetto) e Field.getCookie () Per impostare e recuperare un cookie sul campo. Puoi usarlo per abbinare il campo di modifica come desideri.
EditField[] ef = new EditField[size];//at global in class
//Fare qualcosa
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);
// Completa la creazione dell'interfaccia utente
// Inizia a ottenere valore da 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());
}
}
}
Puoi provare così
Editfield ef = new Editfield();
add(ef);
ef.setcookie("Here you can set object with specific value");
ef.setchangelistner(this);
e nella funzione dell'elenco di cambio di campo
public void fieldChanged(Field field, int context) {
object ob = field.getcookie();
// compare this ob and give appropriate actionss
}