2017-07-05 84 views
0

我想通过从微调框中选择一个国家来填充城市。它应该根据第一个微调者的选择填充第二微调器的内容。我的strings.xml和MainActivity.java文件是这样的:Android从另一个微调器填充微调内容

的strings.xml

<!-- Countries --> 
<string-array name="country_names"> 
    <item>Turkey</item> 
    <item>Spain</item> 
</string-array> 

<!-- Cities --> 
<string-array name="Turkey"> 
    <item>Istanbul</item> 
    <item>Adana</item> 
</string-array> 

<string-array name="Spain"> 
    <item>Madrid</item> 
    <item>Barcelona</item> 
</string-array> 

MainActivity.java

citySpinner = (Spinner) findViewById(R.id.input_city); 
    countrySpinner = (Spinner) findViewById(R.id.input_country); 

    countryAdapter = ArrayAdapter.createFromResource(this,R.array.country_names,android.R.layout.simple_spinner_item); 
    countryAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    final String[] country = new String[1]; 
    countrySpinner.setAdapter(countryAdapter); 
    countrySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) 
     { 
      country[0] = adapterView.getItemAtPosition(i).toString(); 
      Toast.makeText(mContext, adapterView.getItemAtPosition(i) + " selected", Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> adapterView) 
     { 

     } 
    }); 

    cityAdapter = ArrayAdapter.createFromResource(this,R.array.Turkey,android.R.layout.simple_spinner_item); 
    cityAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    citySpinner.setAdapter(cityAdapter); 

我需要给cityAdapter = ArrayAdapter.createFromResource(...)线内的变量,而不是书写的土耳其或任何国家的名称。

我不能拿出任何东西在网络有用的,这是我最后的希望:)

回答

0

试试这个:

countrySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 
       country[0] = adapterView.getItemAtPosition(i).toString(); 
       Toast.makeText(mContext, adapterView.getItemAtPosition(i) + " selected", Toast.LENGTH_SHORT).show(); 
       switch (i) { 
        case 0: 
         cityAdapter = ArrayAdapter.createFromResource(this, R.array.Turkey, android.R.layout.simple_spinner_item); 
         break; 
        case 1: 
         cityAdapter = ArrayAdapter.createFromResource(this, R.array.Madrid, android.R.layout.simple_spinner_item); 
         break; 
       } 
       cityAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
       citySpinner.setAdapter(cityAdapter); 
      } 

     @Override 
     public void onNothingSelected (AdapterView <?> adapterView) 
     { 

     } 
    }); 
+0

它给出了错误** java.lang.NullPointerException:尝试调用虚拟方法'void android.widget.ArrayAdapter.setDropDownViewResource(int)'对null行对象'cityAdapter.setDropDownViewResource(android.R。 ' –

+0

我编辑它现在尝试 –

+0

仍然得到相同的错误 –

0

内第一微调的setonitemselected,宣布第二微调,并呼吁clicklistener功能即second_spinner.setonitemselectedlistener那么这两个回调方法将在第一个微调器的setonitemselected方法内部实现。

+0

究竟怎么了?你能证明吗? –