Java Android微调器视图:setSelection(int位置)和setSelection(int位置,布尔动画)之间的区别?

Java Android微调器视图:setSelection(int位置)和setSelection(int位置,布尔动画)之间的区别?,java,android,spinner,stack-overflow,Java,Android,Spinner,Stack Overflow,我读了文档,但我不太明白。。。参数“animate”的作用是什么 我唯一注意到的是: public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { if (savedPosition != -1) { ((Spinner) parent).setSelection(savedPosition ); savedPosition

我读了文档,但我不太明白。。。参数“animate”的作用是什么

我唯一注意到的是:

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

   //...
}
public void已选择(AdapterView父视图、视图视图、int位置、长id)
{
如果(保存位置!=-1)
{
((微调器)父项).设置选择(保存位置);
savedPosition=-1;
返回;
}
//...
}
…与“setSelection”配合使用效果良好,但与setSelection(savedPosition,true)配合使用时会遇到无止境循环/堆栈溢出错误

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

亲切问候,,
水母

它应该按照名字的意思做。从当前位置设置动画到所需位置。当您使用just setSelection时,当您试图确保用户看到更改(类似于更改通知)并且更改看起来更平滑时,更改更合适。至少这就是我使用它的原因。至于动画,我从来没有任何问题

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


ye正如该评论所暗示的那样,您出于某种原因再次调用该方法,因为我相信动画setSelection在实际设置选择时会这样做。

触发动画似乎会触发onItemSelected事件,奇怪的是,没有动画它就不会被触发。我很确定,即使没有动画,它也会被触发,因为我到达了//。。。刚被选中的代码首先被调用。(意思是,它被调用了两次。)是否有可能存在一些时间延迟,而使用animate时,“savedPosition”从未设置为-1?我不知道,为什么不在setSelection()之前放置“savedPosition=-1”?我这样做了,错误实际上消失了:-)不过还是有点奇怪^^代码看起来很奇怪,因为我遗漏了很多内容。:-)然而,我交换了setSelection和savedPosition=-1行(将savedPosition放入一些局部变量中),它也起了作用。我将保持这种方式,因为我不能确定新的“OnItemSelect”何时被触发无论如何,如果我不想让用户看到更改,我应该使用“setSelection(int)”还是“setSelection(int,false)”?我们只需要使用setSelection(int)。这是一种古老而稳定的方法(不太可能出现一些愚蠢的碎片问题,但谁知道呢)。当这两种方法都有相同的用途时,我会使用setSelection(int)。