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?

È stato utile?

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
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top