简体   繁体   English

spinner.setSelection 不调用 setOnItemSelectedListener 函数

[英]spinner.setSelection not calling setOnItemSelectedListener functions

I have 3 spinners.我有 3 个旋转器。 Each spinner get new data when a previous spinner is set.当设置前一个微调器时,每个微调器都会获得新数据。 So i have nested setOnItemSelectedListener on these spinner.所以我在这些微调器上嵌套了 setOnItemSelectedListener 。

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 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
 }

The above code is first called during onCreate function.上面的代码首先在 onCreate 函数中调用。 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.现在这是我的问题:由于所有这些代码行在 oncreate 期间都运行了一次,因此设置了微调器上的侦听器。 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().所以它现在将'代码块A'然后调用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.在 second_spinner_destination_function() 中,当遇到 spinnerdestination.setSelection(posfrom) 行时,它应该立即运行其 onItemSelected() 函数,而是运行代码块 B 然后在其上设置新的侦听器,然后运行“代码块 E”和之后运行第二个微调器的 onItemSelected() 。

I have made sure that spinnerdestination.setSelection(posfrom) is getting new index and not same as old index.我已经确保 spinnerdestination.setSelection(posfrom) 正在获取新索引而不是旧索引。 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) { spinnervessels.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView << ? > adapterView, View view, int iii, long l) {

       }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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