0

我需要在運行時動態生成UI組件。我能夠生成組件,但是我的問題是如何在動態生成的字段中輸入值?如何從黑莓動態生成的編輯區中獲取價值

我正在做這樣的事情。

final HorizontalFieldManager hfm = new HorizontalFieldManager(); 

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

有沒有什麼方法可以設置字段的標籤,然後我們可以通過標籤找到控件?

回答

1

據我所知,沒有方式爲EditField設置唯一的ID。也許你可以使用它的子類,並實現你自己的唯一ID機制。 或者,由於您的Horizo​​ntalFieldManager只包含EditField,您可以按位置獲取一個字段,並將其轉換爲EditField。就像這樣:

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

UPDATE:

public class MyEditField extends EditField {

private int _id; 

public MyEditField(int id) { 
    _id = id; 
} 

public int getID() { 
    return _id; 
} 

}

class 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); 

還有一些其他的刪除/添加方法,記得要處理內部高速緩存他們。

+0

你可以舉一些子類的例子來實現唯一的id機制嗎? – Krish

+0

當然,試試這個::(太長了,我會編輯回覆。 – Xiangdong

1
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); 

//完成創建UI

//開始獲得價值從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()); 
     } 
    } 
} 
+0

我寫在記事本代碼,所以如果在代碼或錯誤關於拼寫任何拼寫錯誤,那麼請解決它。 –

+0

是否有任何方法可以設置標籤或標識或名稱以獲取特定字段的值? – Krish

+1

嘗試使用setcookie和getcookie ... –

1

你可以嘗試這樣的

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 
} 
相關問題