2016-07-12 3 views
1

Я хочу сделать два прядильника, у первого счетчика есть список состояний, а второй счетчик содержит список городов. Если я выбираю конкретное состояние из первого счетчика, тогда следующий счетчик должен показывать только города только в выбранном состоянии.Сортировка значений в Spinner в зависимости от состояния

Мой андроид код

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 


    Spinner state = (Spinner) findViewById(R.id.spinnerState); 
    ArrayAdapter<CharSequence> stateadapter = ArrayAdapter.createFromResource(
      this, R.array.item_state, android.R.layout.simple_spinner_item); 
    stateadapter.setDropDownViewResource(R.layout.spinner_layout); 
    state.setAdapter(stateadapter); 




    Spinner city = (Spinner) findViewById(R.id.spinnerCity); 
    ArrayAdapter<CharSequence> cityadapter = ArrayAdapter.createFromResource(
      this, R.array.item_city, android.R.layout.simple_spinner_item); 
    cityadapter.setDropDownViewResource(R.layout.spinner_layout); 
    city.setAdapter(cityadapter); 


}} 

Я создал все мои для государства и города.

+0

Как вы сохраняете города с состоянием в XML-файле? –

ответ

0

Добавить слушателя в состояние Spinner

state.setOnItemSelectedListener(this);

Реализовать слушателя:

@Override 
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
    String selectedState = state.getSelectedItem().toString(); 

    List<String> citiesInState = new ArrayList<>(); 
    // add all cities in selectedState to this list using citiesInState.add(); 
    // this will depend upon how you are storing the cities and states 

    ArrayAdapter<String> cityDataAdapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_spinner_item, citiesInState); 
    cityDataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    city.setAdapter(cityDataAdapter); 

} 
1

Есть много способов, вы можете добиться этого, например:

ArrayAdapter<CharSequence> stateadapter; 
switch(state) 
{ 
    case "Florida": 
     { 
      stateadapter = ArrayAdapter.createFromResource(this, R.array.cities_florida, android.R.layout.simple_spinner_item); 
     } break; 
} 

(kinda hardcoded)

Наиболее оптимальным решением является определение его в XML-файле (возможно, вы можете получить его где-то в Интернете) и написать класс, который читает файл и возвращает все города в выбранном состоянии.

чтения: https://developer.android.com/training/basics/network-ops/xml.html

Смежные вопросы