2010-04-22 54 views
1

我在黑莓應用程序中添加動態數量的按鈕,並試圖獲得每個按鈕單擊不同的事件。我無法將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; 

    } 

} 



} 

感謝, 尼科什

回答

0

刪除,如果(場== BTN [背景])從你的代碼。它將工作。 立即享受。

+0

感謝您抽出一些時間,並幫助我與我的問題和遺憾,採取這麼長的時間在等你回來。 我已經從我的代碼中刪除了「if」條件,現在仍在工作,但仍然沒有得到所需的輸出。 當我按下「按鈕0」時,我得到「標籤1」,因爲輸出應該是「標籤0」,即輸出應與按鈕字段的索引相匹配。 有沒有什麼辦法來得到Buttonfield的索引,而不是獲取屏幕上所有字段的索引。像ButtonField.getindex()一樣。 – 2010-04-29 07:40:49

0
btn[i].setChangeListener(listener); 

使用下面的聽衆U將得到所選字段

FieldChangeListener listener = new FieldChangeListener() { 
       public void fieldChanged(Field field, int context) { 
        if (field instanceof ButtonField) { 
         // int matchedIndex = -1; 
         for (int i = 0; i <= 10; i++) { 
          if (field == btn[i]) { 
          // matchedIndex = i; 
           Dialog.alert("Clicked"+i); 
           break; 
          } 
         } 
        } 
       } 
      };