简体   繁体   中英

spinner.setSelection not calling setOnItemSelectedListener functions

I have 3 spinners. Each spinner get new data when a previous spinner is set. So i have nested setOnItemSelectedListener on these spinner.

my code is kind of like this:

 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() contain 2 more spinner

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
 }

The above code is first called during onCreate function. After that if a dropdown changes then the relevant code runs.

Now here's my problem: Since all these lines of code have run once during oncreate, so the listeners on spinners are set. Now lets say i clicked the first spinner and changed something. so it will now 'code block A' and then call second_spinner_destination_function().

In second_spinner_destination_function() when the line spinnerdestination.setSelection(posfrom) is encountered, it should run its onItemSelected() function immediately but instead it goes to run code block B then sets new listener on it and then runs 'code block E' and after that runs the onItemSelected() of second spinner.

I have made sure that spinnerdestination.setSelection(posfrom) is getting new index and not same as old index. Any idea why it is running in this sequence?

You have to separate the spinners because this method immediately runs on spinner attached to the adapter

spinnervessels.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView << ? > adapterView, View view, int iii, long l) {

       }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM