2012-07-30 84 views
1

用戶在EditText中輸入一個數字,應用程序將以編程方式創建多個微調器。當用戶點擊我的用戶界面底部的「保存」按鈕時,我無法獲得這些spinners的位置以保存它們。獲取以編程方式創建的微調器的位置

當我嘗試獲取如下所示的位置時:mArraySpinner.add(spinner.getSelectedItemPosition());我在數組中有幾個空位置,就像偵聽器在創建時觸發一樣,然後它將只保存數組最後一個元素中的最後一個spinners位置。

這裏是我創建紡紗代碼:

for(int i = 1; i <= numStockTanks; i++) { 
     TableRow tR = new TableRow(this); 
     // creates the textView 
     tV1 = new TextView(this); 
     tV1.setText("Stock Tank #" + i + " size: "); 

     // add spinner to row 
     spinner = new Spinner(this); 
     ArrayAdapter<CharSequence> adapterStockTankSize = ArrayAdapter.createFromResource(
       this, R.array.StockTankSize, android.R.layout.simple_spinner_item); 
     adapterStockTankSize.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner.setAdapter(adapterStockTankSize); 
     spinner.setTag(i + 600); 
     spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
      public void onNothingSelected(AdapterView<?> parent) {} 
      public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { 
       mArraySpinner.add(spinner.getSelectedItemPosition()); 
      } 
     }); 

     // add the TextView and the editText to the new TableRow 
     tR.addView(tV1); 
     tR.addView(spinner); 

     // add the TableRow to the TableLayout 
     tL.addView(tR,new TableLayout.LayoutParams(
       LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));  
    } // end for statement 

感謝您的幫助

+0

@mattjgalloway你編輯了什麼? – deerkiller11 2012-07-30 23:59:42

+0

我批准別人編輯整理這個問題。您可以點擊「編輯7小時前」以查看修改方式。 – mattjgalloway 2012-07-31 06:49:50

+0

@mattjgalloway,好吧,我現在看到,它使我的內聯代碼從常規文本中脫穎而出。感謝對不起 – deerkiller11 2012-07-31 15:24:03

回答

0

您的spinner變量每一次重新分配,但onItemSelected方法是使用這個變量。每次都需要重新聲明這個微調變量,以便該方法正在尋找一個唯一的Spinner對象。

更改spinner = new Spinner(this);final Spinner spinner = new Spinner(this);,並刪除您已有的任何聲明spinner

+0

對此感到抱歉,這只是一個例外,它似乎仍然在創建。有什麼想法嗎? – deerkiller11 2012-07-31 00:01:06

+0

是的,這是預期的行爲。只要'Spinner'改變,'onItemSelected'就會被調用;這包括第一次設置的時間。你最好的選擇是監視這個(使用'private boolean'),並且只在初始設置後觸發你的代碼。 – Eric 2012-07-31 00:17:04

+0

工作,再次感謝 – deerkiller11 2012-07-31 01:03:57

相關問題