2011-05-18 202 views
0

我阅读了文档,但我不太明白......参数“animate”是什么?Android微调视图:setSelection(int position)和setSelection(int position,boolean animate)之间的区别?

唯一的事情,我注意到:

public void onItemSelected(AdapterView<?> parent, View view, int position, long id) 
{ 
    if (savedPosition != -1) 
    { 
     ((Spinner) parent).setSelection(savedPosition); 
     savedPosition = -1; 
     return; 
    } 

    //... 
} 

...正常工作与 “为setSelection”,但运行到无限循环/的StackOverflowError为setSelection(savedPosition,真);

我真的很好奇为什么会这样?

亲切的问候, 水母

+0

看起来像触发动画会触发onItemSelected事件,它是不可思议的,它不会触发没有动画.. – BFil 2011-05-18 13:08:20

+0

我很确定,即使没有动画触发它,因为我到达// ... onItemSelected之后的代码首先被调用。 (意思是,它被称为两次。)有可能,有一些时间延迟,而动画“savedPosition”从未设置为-1? – jellyfish 2011-05-18 13:13:43

+0

我不知道,你为什么不在setSelection()之前放置“savedPosition = -1”? – BFil 2011-05-18 13:23:55

回答

1

那么它应该做的事情,顾名思义。从当前位置动画到所需位置。当您仅使用setSelection时,如果您试图确保用户看到更改(对更改的通知进行排序),并且看起来更平滑,则更改更合适。至少这就是我使用它的原因。至于动画我从来没有任何问题。

为什么你使用savedPosition而不是位置进行选择?也许这就是导致循环的原因。我的建议是试着用位置来做,看看它是否失败。你的代码有点奇怪..

你作为评论建议你再次调用该方法出于某种原因,因为我相信动画setSelection会在选择实际设置时执行此操作。

+0

该代码看起来很奇怪,因为我遗漏了很多。 :-) 但是,我交换了setSelection和savedPosition = -1行(将savedPosition放入某个局部变量),它也起作用。我会保持这种方式,因为我不能确定何时启动新的“OnItemSelect”。 - 无论如何,如果我希望用户*不*看到更改,我应该使用“setSelection(int)”或“setSelection(int,false”)? – jellyfish 2011-05-18 13:25:53

+1

以及使用setSelection(int)。它是一种古老而稳定的方法(不太可能出现一些愚蠢的碎片问题,无论如何不应该发生,但谁知道)。当他们两个服务于同一个purpouse时,我会使用setSelection(int)。 – DArkO 2011-05-18 13:51:49

+0

好的,谢谢。:-) – jellyfish 2011-05-18 14:08:00

相关问题