0

実行時に動的にuiコンポーネントを生成する必要があります。私はコンポーネントを生成することができますが、私の問題は、動的に生成されたフィールドに値を入力する方法ですか?ブラックベリーで動的に生成されたeditfieldから値を取得する方法

私はこのようなことをしています。

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

特定のフィールドの値を取得できるように、フィールドにタグまたはIDまたは名前を設定して取得する方法はありますか? – Krish

+1

setcookieとgetcookieを使用してみてください... –

3

Field.setCookie(Object)Field.getCookie()を使用して、フィールドでCookieを設定および取得します。これを使用して、編集フィールドを好みの方法で一致させることができます。

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 
} 
関連する問題