Blackberry で動的に生成された編集フィールドから値を取得する方法
-
27-10-2019 - |
質問
実行時に動的に ui コンポーネントを生成する必要があります。コンポーネントを生成することはできますが、問題は動的に生成されたフィールドに入力された値を取得する方法です。
こんなことやってます。
final HorizontalFieldManager hfm = new HorizontalFieldManager();
for (int i=0; i<5; i++)
{
hfm.add(new EditField());
}
フィールドのタグを設定し、後でタグによるコントロールを見つける方法はありますか?
解決
私の知る限り、EditField に一意の ID を設定する方法はありません。おそらく、そのサブクラスを使用して、独自の一意の ID メカニズムを実装することができます。または、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;
}
}
class MyHfm extends horizontalFieldManager {
//This is a cache, which holds all EditFields.
プライベート IntHashtable _editfields = 新しい 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() フィールドにCookieを設定して取得します。これを使用して、必要な方法で編集フィールドを一致させることができます。
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());
}
}
}
このように試すことができます
Editfield ef = new Editfield();
add(ef);
ef.setcookie("Here you can set object with specific value");
ef.setchangelistner(this);
フィールド変更リストfunction
public void fieldChanged(Field field, int context) {
object ob = field.getcookie();
// compare this ob and give appropriate actionss
}