2013-04-16 54 views
1

我有這樣的代碼爲止。模型微調器根據用戶爲製造商選擇的內容自動填充。 (對於下面的代碼,我只有它爲寶馬設置)。根據製造商和型號,是否有任何方法讓第三個微調(Color)被填充?根據以往的微調自動填充一個微調 - 安卓

所以,如果你在第一微調選擇寶馬,然後選擇M3轎跑第二微調第三微調將顯示在M3_Color數組中的所有選項。

import android.app.Activity; 
    import android.os.Bundle; 
    import android.view.View; 
    import android.widget.AdapterView; 
    import android.widget.AdapterView.OnItemSelectedListener; 
    import android.widget.ArrayAdapter; 
    import android.widget.Spinner; 

    public class MainActivity extends Activity implements OnItemSelectedListener { 

    private String[] Manufacture { "Ford", 
            "BMW", 
            "Nissan", 
            "Toyota", 
            "Chevy", 
           }; 

    private String[] BMW_Model = { "128i Coupe", 
          "M3 Coupe", 
          "M5 Sedan", 
          "640i Gran Coupe", 
          "335i Coupe", 
           }; 


    private String[] M3_Color = { "Jerez Black Metallic", 
          "Melbourne Red Metallic", 
          "Mineral White Metallic", 
          "Le Mans Blue Metallic", 
          }; 


     Spinner spinnerManufacture, spinnerModel, spinnerColor; 


     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


    spinnerManufacture = (Spinner) findViewById(R.id.manufacture_spinner); 


    ArrayAdapter<String> MaufactureAdapter = new ArrayAdapter<String> (this, android.R.layout.simple_spinner_item,Manufacture); 


     MaufactureAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinnerManufacture.setAdapter(MaufactureAdapter); 


    spinnerManufacture.setOnItemSelectedListener(this); 


    } 
    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, int position,long id) { 
     // TODO Auto-generated method stub 
     { 
      if(parent.getId() == R.id.maufacture_spinner && position == 1) 
      { 
       spinnerModel = (Spinner) findViewById(R.id.model_spinner); 
       ArrayAdapter<String> ModelAdapter = new ArrayAdapter<String> (this, android.R.layout.simple_spinner_item, BMW_Model); 
       ModelAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
       spinnerModel.setAdapter(ModelAdapter); 


       if(parent.getId() == R.id.model_spinner) 
       { 
       String[] Color; 
       if(spinnerMaufacture.getSelectedItem().toString.equals("BMW")) 
       { 
         if(spinnerModel.getSelectedItem().toString.equals("M3 Coupe)) 
        { 
        Color = M3_Color 
        } 
       } 

        spinnerColor = (Spinner) findViewById(R.id.color_spinner); 
        ArrayAdapter<String> ColorAdapter = new ArrayAdapter<String> (this, android.R.layout.simple_spinner_item, M3_Color); 
        ColorAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
        spinnerColor.setAdapter(ColorAdapter); 
       } 
      } 




    @Override 
    public void onNothingSelected(AdapterView<?> arg0) { 
     // TODO Auto-generated method stub 

    } 
    } 

回答

2

你需要移動if(parent.getId() == R.id.model_spinner)if(parent.getId() == R.id.maufacture_spinner然後makesure和呼叫spinnerModel.setOnItemSelectedListener(this)的onCreate,要做到這一點,你需要移動spinnerModel = (Spinner) findViewById(R.id.model_spinner)到您的創建,我建議你做你所有的觀點一樣,這樣你不每次選擇微調項目時都不要撥打findViewById

編輯:

Spinner spinnerManufacture, spinnerModel, spinnerColor; 
private ArrayAdapter<String> modelAdapter; 
private ArrayAdapter<String> maufactureAdapter; 
private ArrayAdapter<String> colorAdapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    spinnerManufacture = (Spinner) findViewById(R.id.manufacture_spinner); 
    spinnerModel = (Spinner) findViewById(R.id.model_spinner); 
    spinnerColor = (Spinner) findViewById(R.id.color_spinner); 

    maufactureAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, Manufacture); 
    modelAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item); 
    colorAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item); 

    maufactureAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    modelAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    colorAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    spinnerColor.setAdapter(colorAdapter); 
    spinnerManufacture.setAdapter(maufactureAdapter); 
    spinnerModel.setAdapter(modelAdapter); 

    spinnerManufacture.setOnItemSelectedListener(this); 
    spinnerModel.setOnItemSelectedListener(this); 
    spinnerColor.setOnItemSelectedListener(this); 

} 

@Override 
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
    if (parent.getId() == R.id.maufacture_spinner) { 
     String[] model; 
     if (spinnerManufacture.getSelectedItem().toString().equals("BMW")){ 
      model = BMW_Model; 
     } else { 
      model = new String[] {"not sure what model list to use"}; 
     } 
     modelAdapter.clear(); 
     modelAdapter.addAll(model); 
    } 
    if (parent.getId() == R.id.model_spinner) { 
     String[] Color; 
     if (spinnerModel.getSelectedItem().toString().equals("M3 Coupe")) { 
      Color = M3_Color; 
     } else if (spinnerModel.getSelectedItem().toString().equals("M5 Sedan")) { 
      Color = M5_Color; 
     } else { 
      Color = new String[] { "not sure what color list to use" }; 
     } 
     colorAdapter.clear(); 
     colorAdapter.addAll(Color); 
    } 
} 

這就是我推薦你試試。

+0

代碼出於某種原因,第二微調沒有得到做它用一個例子@更新這樣 – user31610

+0

填充user31610 – Eluvatar

+0

非常感謝你 – user31610

0

只需根據如下選擇的內容構建字符串即可。這臺顏色列表中爲被選擇M3_Color寶馬和M3雙門轎跑車和M5_Color在選擇BMW和M5轎車。這需要爲所有可能的組合完成。

 if(parent.getId() == R.id.model_spinner) 
     { 
       String[] Color = new String[]; 
       if(spinnerManufacture.getSelectedItem().toString().equals("BMW")) 
       { 

        if(spinnerModel.getSelectedItem().toString().equals("M3 Coupe")) 
        { 
         Color = M3_Color; 
        } 
        else if(spinnerModel.getSelectedItem().toString().equals("M5 Sedan")) 
        { 
         Color = M5_Color; 
        } 
       } 
       spinnerColor = (Spinner) findViewById(R.id.color_spinner); 
       ArrayAdapter<String> ColorAdapter = new ArrayAdapter<String> (this, android.R.layout.simple_spinner_item, Color); 
       ColorAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
       spinnerColor.setAdapter(ColorAdapter); 
     } 
+0

當我嘗試聲明顏色數組時,我得到這個錯誤:變量必須提供維度表達式或數組初始化程序 – user31610

+2

嘗試使用String [] Color;'''''''''''''''''''' – Eluvatar

+0

感謝,第二微調獲取填充像它應該,但是當你第二次微調是M3雙門轎跑車 – user31610