2013-04-16 53 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