Вы говорите, что содержимое более поздних блесен зависит от выбора в более ранних, но отправленный вами код зависит только от содержимого блесны.
adapter1.getItem(0)
возвращает первый элемент в списке, а не текущий выбранный элемент.Чтобы получить выбранный в данный момент элемент, используйте метод прядильщика (а не адаптера) getSelectedItem()
.
Например, вы можете поместить что-то подобное в onItemSelectedListener вашего первого Spinner (отредактировано на основе ваших комментариев ниже):
public void onItemSelected (AdapterView<?> parent, View view, int position, long id) {
Object selectedItem = parent.getSelectedItem();
// Do this if the first Spinner has a set of options that are
// known in advance.
if (/*selectedItem is something*/) {
// Set up the second Spinner in some way
} else if (/*selectedItem is something else*/) {
// Set up the second Spinner in another way
}
// OR, if you need to do something more complex
// that would cause too much clutter here, do this.
fillSecondSpinner(selectedItem);
}
Затем поместите что-то похожее во второй Spinner в OnItemSelectedListener.Получите выбранные предметы из первого и второго счетчиков, используя getSelectedItem()
(или позиции элементов, используя getSelectedItemId()
для первого и параметр позиции для второго).Используйте выбранные элементы для настройки третьего.
Редактировать: OnItemSelectedListener для второго Spinner будет выглядеть примерно так:
// This must be defined in the enclosing scope.
final Spinner firstSpinner; // Must be final to be accessible from inner class.
Spinner secondSpinner;
// ...
secondSpinner.setOnItemSelectedListener(new OnItemSelectedListener {
public void onItemSelected (AdapterView<?> parent, View view, int position, long id) {
// Again, usually the selected items should be of
// a more specific type than Object.
Object firstSelection = firstSpinner.getSelectedItem();
Object secondSelection = parent.getSelectedItem();
fillThirdSpinner(firstSelection, secondSelection);
}
public void onNothingSelected (AdapterView<?> parent) { }
});