0

동적 generaged editfield에서 값을 얻기 위해 어떻게 런타임에 동적 UI 구성 요소를 생성해야합니다. 구성 요소를 생성 할 수 있지만 내 문제는 동적으로 생성 된 필드에 값을 입력하는 방법입니다.블랙 베리

나는 이런 식으로하고있다.

final HorizontalFieldManager hfm = new HorizontalFieldManager(); 

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

필드의 태그를 설정하는 방법은 없나요 이후 우리는 태그에 의해 제어를 찾을 수 있을까?

답변

1

를 수행, 더는 없다 EditField에 대한 고유 한 ID를 설정하는 방법. 어쩌면 당신은 그것의 하위 클래스를 사용할 수 있고 자신 만의 고유 id 메커니즘을 구현할 수 있습니다. 또는 HorizontalFieldManager에 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 

// 내가 아는 한 EditField

뭔가

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

// 시작지고 값을

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() 설정 및 필드에서 쿠키를 검색 할 수 있습니다. 이를 사용하여 편집 필드를 원하는대로 일치시킬 수 있습니다.

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 
}