0
在onCreate()
我使用一个setOnItemSelectedListener()
微调。然后在onResume()
我在同一个微调器上调用setSelection()
。会发生什么是监听器被调用,但事件并不按我预期的顺序发生。如果我的代码如下所示:如何等待对象侦听器完成处理事件?
sp1.setOnItemSelectedListener(...
@Override
public void onItemSelected(){...
Log.e("marker", "stage 2");
...}
...});
和
Log.e("marker", "stage 1");
sp1.setSelection(1, true);
Log.e("marker", "stage 3");
在logcat中的事件发生顺序如下:阶段1,stage3的,然后第二阶段。很显然,我希望它是阶段1, stage2,然后stage3。我如何实现这一目标?
为什么这很重要?如果你真的需要这个,那么你可以在调用setSelection()之前移除监听器,然后直接调用onItemSelected()(这是一个丑陋但简单的解决方案) –
它与相关的spinners(我其实有5个)在包含活动被销毁后如何重新创建其状态(选择了哪些项目)。所以它就像这样,sp2依赖于sp1,sp3依赖于sp2,依此类推。我得到一个indexOutOfBoundsExeception,因为当我调用sp2.setSelection()时,sp2的适配器尚未更新(应该是在sp1的onItemSelected中处理的)。 – user1923613
嗨,@MichaelButscher。你介意把它写成答案(所以我可以把它作为正确的答案/ sol'n)。我自己解决了这个问题,我的代码就像你说的那样结束了。它看起来很可怕,主要是因为依赖关系,if-else语句太多。 我可以在这里问一个相关的问题吗?有没有一种标准的方式来实现依赖spinners而不必使用如此多的if-else语句?我认为这是一个相当普遍的情况。就像用户需要输入他/她的地址一样。你将有一个STATE-Spinner,CITY/TOWN-spinner和STREET-Spinner,它们将被相应填充。 – user1923613