Имам 3 спинера. Всеки спинер получава нови данни, когато е зададен предишен спинер. Така че съм вложил setOnItemSelectedListener в тези въртящи се инструменти.
моят код е нещо подобно:
MyAdapter adapter = new MyAdapter(getActivity(), R.layout.res_custom_new, categories, response.body(), pos);
adapter.setDropDownViewResource(R.layout.res_custom_new);
spinner.setAdapter(adapter);
spinner.setSelection(pos);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView << ? > adapterView, View view, int ii, long l) {
//some code A
second_spinner_destination_function();
}
});
second_spinner_destination_function() съдържа още 2 спинера
public void second_spinner_destination_function() {
//some code
ArrayAdapter < String > dataAd = new ArrayAdapter < String > (getActivity(), android.R.layout.simple_spinner_item, getDestination);
dataAd.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerdestination.setAdapter(dataAd);
spinnerdestination.setSelection(posfrom);
//code block B
spinnerdestination.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView << ? > adapterView, View view, final int i, long l) {
//some code C
ArrayAdapter < String > dataAdapter2 = new ArrayAdapter < String > (getActivity(), android.R.layout.simple_spinner_item, getVesselName);
dataAdapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
third_spinnervessels.setAdapter(dataAdapter2);
third_spinnervessels.setSelection(posvessel);
spinnervessels.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView << ? > adapterView, View view, int iii, long l) {
}
});
//some code D
}
});
//some Code E
}
Горният код се извиква първо по време на функцията onCreate. След това, ако падащото меню се промени, тогава се изпълнява съответният код.
Сега ето моят проблем: тъй като всички тези редове код са се изпълнявали веднъж по време на oncreate, така че слушателите на spinners са зададени. Сега да кажем, че щракнах върху първия спинър и промених нещо. така че сега ще „кодира блок A“ и след това ще извика second_spinner_destination_function().
Във second_spinner_destination_function(), когато се срещне редът spinnerdestination.setSelection(posfrom), той трябва незабавно да изпълни своята функция onItemSelected(), но вместо това отива да изпълни кодов блок B, след което задава нов слушател върху него и след това изпълнява „кодов блок E“ и след това който изпълнява onItemSelected() на втория spinner.
Уверих се, че spinnerdestination.setSelection(posfrom) получава нов индекс, а не същият като стария индекс. Някаква идея защо работи в тази последователност?