簡體   English   中英

spinner.setSelection 不調用 setOnItemSelectedListener 函數

[英]spinner.setSelection not calling setOnItemSelectedListener functions

我有 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 期間都運行了一次,因此設置了微調器上的偵聽器。 現在假設我單擊了第一個微調器並更改了一些內容。 所以它現在將'代碼塊A'然后調用second_spinner_destination_function()。

在 second_spinner_destination_function() 中,當遇到 spinnerdestination.setSelection(posfrom) 行時,它應該立即運行其 onItemSelected() 函數,而是運行代碼塊 B 然后在其上設置新的偵聽器,然后運行“代碼塊 E”和之后運行第二個微調器的 onItemSelected() 。

我已經確保 spinnerdestination.setSelection(posfrom) 正在獲取新索引而不是舊索引。 知道它為什么按這個順序運行嗎?

您必須將微調器分開,因為此方法會立即在連接到適配器的微調器上運行

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