android.widget.Spinner

正文

  问题很奇怪,此外还发现适配完数据后会默认选中第一个,并且这个默认选中第一个的操作并不是马上执行的,而是一段时候后再执行,并触发OnItemSelectedListener事件。下面直奔主题:

  旧代码:

       spinner.setAdapter(adapter);
       spinner.setSelection(
2 );

  新代码:

       spinner.setAdapter(adapter);
       spinner.setSelection(
2 , true );

  在来看setSelection有两个参数的函数重载的说明:

setSelection(int position, boolean animate)

  英文:Jump directly to a specific item in the adapter data.

  中文:直接跳到数据适配器中指定项。


  以下是两个函数的源代码:

复制代码
/**
    * Jump directly to a specific item in the adapter data.
*/
public void setSelection( int position, boolean animate) {
// Animate only if requested position is already on screen somewhere
boolean shouldAnimate = animate && mFirstPosition <= position &&
               position
<= mFirstPosition + getChildCount() - 1 ;
       setSelectionInt(position, shouldAnimate);
   }


   @Override
public void setSelection( int position) {
       setNextSelectedPositionInt(position);
       requestLayout();
       invalidate();
   }
复制代码


结束

  看起来像是专门准备了一个函数在数据适配(填充)完后设置默认值的,可惜API文档还没有翻译到这里,不然少走这个弯路了 :)


你可能感兴趣的:(Spinner,源代码,androdi)