2013-06-21 66 views
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。我如何实现这一目标?

+0

为什么这很重要?如果你真的需要这个,那么你可以在调用setSelection()之前移除监听器,然后直接调用onItemSelected()(这是一个丑陋但简单的解决方案) –

+0

它与相关的spinners(我其实有5个)在包含活动被销毁后如何重新创建其状态(选择了哪些项目)。所以它就像这样,sp2依赖于sp1,sp3依赖于sp2,依此类推。我得到一个indexOutOfBoundsExeception,因为当我调用sp2.setSelection()时,sp2的适配器尚未更新(应该是在sp1的onItemSelected中处理的)。 – user1923613

+0

嗨,@MichaelButscher。你介意把它写成答案(所以我可以把它作为正确的答案/ sol'n)。我自己解决了这个问题,我的代码就像你说的那样结束了。它看起来很可怕,主要是因为依赖关系,if-else语句太多。 我可以在这里问一个相关的问题吗?有没有一种标准的方式来实现依赖spinners而不必使用如此多的if-else语句?我认为这是一个相当普遍的情况。就像用户需要输入他/她的地址一样。你将有一个STATE-Spinner,CITY/TOWN-spinner和STREET-Spinner,它们将被相应填充。 – user1923613

回答

0

如果你真的需要这个,那么你可以在调用setSelection()之前删除的监听器和后直接调用onItemSelected()(这是一个丑陋的,但简单的解决方案)