spinner.setSelection не извиква функции setOnItemSelectedListener

Имам 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) получава нов индекс, а не същият като стария индекс. Някаква идея защо работи в тази последователност?


person user1594724    schedule 25.09.2020    source източник


Отговори (1)


Трябва да разделите центрофугите, защото този метод незабавно се изпълнява на центрофуга, прикрепена към адаптера

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

       }
person sunny vishwakarma    schedule 25.09.2020
comment
можеш ли да обясниш малко повече какво имаш предвид под отделно? Също така проверих и не се изпълнява веднага след setselection() - person user1594724; 25.09.2020