0

在片段中工作時,我試圖返回一個從選擇微調器中的項目確定的值,但我無法使其工作。方法內的Toast通知不起作用,看起來問題在方法中。我怎樣才能解決這個問題?android - 如何使用/設置嵌套spinners?

public Spinner districtSpinner, countySpinner; 
public int selectedDistrict; 

是使用的變量。這裏是我的父母旋塗法,districtSpinner()

public void districtSpinner() { 

    ArrayAdapter<String> Dadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.districtNames)); 
    Dadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line); 
    districtSpinner.setAdapter(Dadapter); 

    districtSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 

                public void onItemSelected(AdapterView<?> parent, View view, 
                      int position, long id) { 
                 selectedDistrictPosition = districtSpinner.getSelectedItemPosition(); 
                 switch (selectedDistrictPosition) { 
                  case 0: { 
                   selectedDistrict = 1; 
                   break; 
                  } 
                  case 1: { 
                   selectedDistrict=2; 
                   break; 
                  } 
                  case 2: { 
                   selectedDistrict=3; 
                   break; 
                  } 
                  case 3: { 
                   selectedDistrict=4; 
                   break; 
                  } 
                  case 4: { 
                   selectedDistrict=5; 
                   break; 
                  } 
                  case 5: { 
                   selectedDistrict=6; 
                   break; 
                  } 
                  case 6: { 
                   selectedDistrict=8; 
                   break; 
                  } 
                  case 7: { 
                   selectedDistrict=9; 
                   break; 
                  } 
                  case 8: { 
                   selectedDistrict=10; 
                   break; 
                  } 
                  case 9: { 
                   selectedDistrict=11; 
                   break; 
                  } 
                  case 10: { 
                   selectedDistrict=12; 
                   break; 
                  } 
                  default: { 
                   selectedDistrict=1; 
                   break; 
                  } 
                 } 
                } 

                public void onNothingSelected(AdapterView<?> parent) { 
                } 
               } 
    ); 

} 

這是孩子微調「countySpinner」我想使依賴於父微調。該方法應根據selectedDistrict進行切換,並使用包含每個區縣的集合(R.array.districtx)的相應字符串數組設置微調器。目前,第二個微調器什麼都不做,就我而言,這個縣的調子()甚至沒有被調用。

public void countySpinner() { 

    switch (selectedDistrict) { 
     case 0: { 
      break; 
     } 
     case 1: { 
      ArrayAdapter<String> Cadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.district1)); 
      Cadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line); 
      countySpinner.setAdapter(Cadapter); 

      countySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
                 public void onItemSelected(AdapterView<?> parent, View view, 
                        int position, long id) { 
                 } 

                 public void onNothingSelected(AdapterView<?> parent) { 
                 } 
                } 
      ); 
      break; 
     } 
     case 2: { 
      ArrayAdapter<String> Cadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.district2)); 
      Cadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line); 
      countySpinner.setAdapter(Cadapter); 

      countySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
                 public void onItemSelected(AdapterView<?> parent, View view, 
                        int position, long id) { 
                 } 

                 public void onNothingSelected(AdapterView<?> parent) { 
                 } 
                } 
      ); 
      break; 
     } 
     case 3: { 
      ArrayAdapter<String> Cadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.district3)); 
      Cadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line); 
      countySpinner.setAdapter(Cadapter); 

      countySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
                 public void onItemSelected(AdapterView<?> parent, View view, 
                        int position, long id) { 
                 } 

                 public void onNothingSelected(AdapterView<?> parent) { 
                 } 
                } 
      ); 
      break; 
     } 
     case 4: { 
      ArrayAdapter<String> Cadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.district4)); 
      Cadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line); 
      countySpinner.setAdapter(Cadapter); 

      countySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
                 public void onItemSelected(AdapterView<?> parent, View view, 
                        int position, long id) { 
                 } 

                 public void onNothingSelected(AdapterView<?> parent) { 
                 } 
                } 
      ); 
      break; 
     } 
     case 5: { 
      ArrayAdapter<String> Cadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.district5)); 
      Cadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line); 
      countySpinner.setAdapter(Cadapter); 

      countySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
                 public void onItemSelected(AdapterView<?> parent, View view, 
                        int position, long id) { 
                 } 

                 public void onNothingSelected(AdapterView<?> parent) { 
                 } 
                } 
      ); 
      break; 
     } 
     case 6: { 
      ArrayAdapter<String> Cadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.district6)); 
      Cadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line); 
      countySpinner.setAdapter(Cadapter); 

      countySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
                 public void onItemSelected(AdapterView<?> parent, View view, 
                        int position, long id) { 
                 } 

                 public void onNothingSelected(AdapterView<?> parent) { 
                 } 
                } 
      ); 
      break; 
     } 
     case 7: { 

      break; 
     } 
     case 8: { 
      ArrayAdapter<String> Cadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.district8)); 
      Cadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line); 
      countySpinner.setAdapter(Cadapter); 

      countySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
                 public void onItemSelected(AdapterView<?> parent, View view, 
                        int position, long id) { 
                 } 

                 public void onNothingSelected(AdapterView<?> parent) { 
                 } 
                } 
      ); 
      break; 
     } 
     case 9: { 
      ArrayAdapter<String> Cadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.district9)); 
      Cadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line); 
      countySpinner.setAdapter(Cadapter); 

      countySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
                 public void onItemSelected(AdapterView<?> parent, View view, 
                        int position, long id) { 
                 } 

                 public void onNothingSelected(AdapterView<?> parent) { 
                 } 
                } 
      ); 
      break; 
     } 
     case 10: { 
      ArrayAdapter<String> Cadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.district10)); 
      Cadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line); 
      countySpinner.setAdapter(Cadapter); 

      countySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
                 public void onItemSelected(AdapterView<?> parent, View view, 
                        int position, long id) { 
                 } 

                 public void onNothingSelected(AdapterView<?> parent) { 
                 } 
                } 
      ); 
      break; 
     } 
     case 11: { 
      ArrayAdapter<String> Cadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.district11)); 
      Cadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line); 
      countySpinner.setAdapter(Cadapter); 

      countySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
                 public void onItemSelected(AdapterView<?> parent, View view, 
                        int position, long id) { 
                 } 

                 public void onNothingSelected(AdapterView<?> parent) { 
                 } 
                } 
      ); 
      break; 
     } 
     case 12: { 
      ArrayAdapter<String> Cadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.district12)); 
      Cadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line); 
      countySpinner.setAdapter(Cadapter); 

      countySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
                 public void onItemSelected(AdapterView<?> parent, View view, 
                        int position, long id) { 
                 } 

                 public void onNothingSelected(AdapterView<?> parent) { 
                 } 
                } 
      ); 
      break; 
     } 
     default: { 
      break; 
     } 

    } 
+0

districtSpinner()是如何使用的?看起來你調用它並期望所選的int是返回值。 – 2014-09-19 15:05:34

+0

@ErikNedwidek它幾乎只是用來指定選擇哪個區域。我試圖在開關情況下使用返回的int。 – JHinne 2014-09-19 15:08:02

+0

這就是問題所在。 'switch case'只會在選擇項目時運行,而不是在調用'districtSpinner()'方法時運行。 – 2014-09-19 20:34:06

回答

1

你可以說這個問題更好,比如I want to setup my second spinner according to the choice made in first spinner。那麼你最好這樣做,因爲你有辦法在其中得到相同的代碼。

public void districtSpinner() { 

ArrayAdapter<String> Dadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.districtNames)); 
Dadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line); 
districtSpinner.setAdapter(Dadapter); 

districtSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 

     int selectedDistrict = position+1; 
     // do yourself a favor and intoduce an empty choice for 7; 


     countySpinner(selectedDistrict);          
    } 

    public void onNothingSelected(AdapterView<?> parent) { 
    } 
} 
); 
} 

private int getDistrictResourceId (int districtnr) { 
    int resId = R.array.district1; 
    switch (districtnr) 
    { 
    case 1: 
    resId = R.array.district1; 
    break; 
    case 2: 
    resId = R.array.district2; 
    break; 

    // please add the rest 
    } 

return resId; 
} 

public void countySpinner(int districtnr) { 

int resId = getDistrictResourceId(districtnr); 

ArrayAdapter<String> Cadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, getResources().getStringArray(resId)); 
     Cadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line); 
     countySpinner.setAdapter(Cadapter); 

     countySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      } 
      public void onNothingSelected(AdapterView<?> parent) { 
      } 
} 
     );   
    } 
} 
+0

完美的工作,謝謝!我甚至沒有想過改變你的做法,這比我使用的方法簡單得多。 – JHinne 2014-09-22 17:32:25

0

就我所見,你應該看到吐司。但讓它返回一個值是沒有意義的。您只是在該功能中設置適配器。確實有一個onclicklistener,並在點擊selectedDistrict設置。但是,只有當用戶點擊一個項目時纔會發生這種情況。你的功能早已回覆。你的函數現在返回你調用它之前的靜態selectedDistrict值。

+0

如何在選擇時存儲該值,然後保存該值? – JHinne 2014-09-22 13:21:29

+0

這取決於你想用這個值生活多久。但是如果它能在應用程序重新啓動後生存下來,您可以使用共享首選項 – greenapps 2014-09-22 13:43:56

+0

我只需要它的存活時間足夠長,以便用戶在數據記錄會話結束時將值與其餘測量/數據一起導出。 – JHinne 2014-09-22 13:45:24