如何解决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,final int i,long l) {
//some code C
ArrayAdapter < String > dataAdapter2 = new ArrayAdapter < String > (getActivity(),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,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){
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。