我在黑莓應用程序中添加動態數量的按鈕,並試圖獲得每個按鈕單擊不同的事件。我無法將setchangelistener()應用於這些按鈕數組,因爲一旦循環在添加完所有按鈕後完成,事件將僅爲最後一個索引按鈕生成。黑莓開發,添加動態數量的按鈕,併爲他們設置Fieldchangelistener()
如果我讓我們使用getIndex(),它只有在我的屏幕上沒有添加任何其他字段時才能正常運行,但如果我將其他字段與這些按鈕數組一起添加,getIndex()函數會計入它們索引也是如此。
任何人都可以請幫我把FieldChangeListener設置爲ButtonField的數組嗎?
這裏是我使用ButtonField數組的方式示例代碼。我在屏幕頂部添加了兩個測試LabelField的代碼,如果我刪除它們,代碼將正常運行,並且每次單擊按鈕都會得到不同的結果,但是如果我保持它們處於活動狀態,索引將生效,並且Button不會工作。
package buttonclickloop;
import net.rim.device.api.ui.DrawStyle;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.component.ButtonField;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.container.HorizontalFieldManager;
import net.rim.device.api.ui.container.MainScreen;
public class ButtoncClickLoop extends MainScreen {
int i = 0;
private ButtonField[] btn = new ButtonField[50];
public ButtoncClickLoop() {
// TODO Auto-generated constructor stub
LabelField Field1 = new LabelField("Field1");
LabelField Field2 = new LabelField("Field2",DrawStyle.RIGHT | ButtonField.USE_ALL_WIDTH);
HorizontalFieldManager FieldHmgr = new HorizontalFieldManager();
FieldHmgr.add(Field1);
FieldHmgr.add(Field2);
FieldHmgr.setMargin(0,0,10,5);
add(FieldHmgr);
while (i < 3){
FieldChangeListener listener = new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
context = field.getIndex();
if (field == btn[context]){
add(new LabelField("Label" + context + ""));
}
}
};
btn[i] = new ButtonField("Button" + i + "");
btn[i].setChangeListener(listener);
add(btn[i]);
i = i + 1;
}
}
}
感謝, 尼科什
感謝您抽出一些時間,並幫助我與我的問題和遺憾,採取這麼長的時間在等你回來。 我已經從我的代碼中刪除了「if」條件,現在仍在工作,但仍然沒有得到所需的輸出。 當我按下「按鈕0」時,我得到「標籤1」,因爲輸出應該是「標籤0」,即輸出應與按鈕字段的索引相匹配。 有沒有什麼辦法來得到Buttonfield的索引,而不是獲取屏幕上所有字段的索引。像ButtonField.getindex()一樣。 – 2010-04-29 07:40:49