[英]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.