Spinner初始化不触发onItemSelected

yqj234 2014-08-08 07:15:51
Spinner在初始化时会自动调用一次OnItemSelectedListener事件,
但在实际开发过程中,我们不需要此功能.本人通过总结,终于找到最简单的解决方法
提供的解决办法:
第一步:设定Spinner数据源
第二步:注册事件之前调用 spinner.setSelection(0, true);
第三步:注册事件
第四步:将事件中判断 spinner选择索引结果为0,则退出事件处理
if (arg2==0)
{
return;
}

这样OnItemSelectedListener事件不会被触发



private void initMySpinner() {
String[] phones = {"iPhone","Android","BlackBerry"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this, android.R.layout. simple_spinner_item,
phones);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setPrompt("test");
spinner.setSelection(0, true);
spinner.setOnItemSelectedListener(new SpinnerOnSelectedListener());
}

private class SpinnerOnSelectedListener implements OnItemSelectedListener {

@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
//退出事件处理(初始化)
if (arg2==0)
{
return;
}
//处理你选择的事件
................
}


@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub

}
}
...全文
2900 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_32136237 2018-07-25
  • 打赏
  • 举报
回复
按1楼提供的思路,优化了一下:
private boolean isFirst = true;
Spinner.post(new Runnable() {

@Override
public void run() {
isFirst = false;
}
});
我觉得这样会更好!
Night999 2017-03-29
  • 打赏
  • 举报
回复
引用 5 楼 u012185875 的回复:
[quote=引用 4 楼 qiantujava 的回复:] [quote=引用 3 楼 u012185875 的回复:] 为什么不用 setSelected(0,true)
木有这个方法[/quote] spinner.setSelection(0, false);[/quote]这个方法在安卓7.0无效
superstar0013 2016-02-01
  • 打赏
  • 举报
回复
引用 1 楼 tcmakebest 的回复:
这也叫最简单,BS,应该这样: boolean first=true; if(first) { first=false;} else { 事件处理代码; }
这个是写在监听事件里吗?
NowIWanaBe 2016-02-01
  • 打赏
  • 举报
回复
引用 4 楼 qiantujava 的回复:
[quote=引用 3 楼 u012185875 的回复:] 为什么不用 setSelected(0,true)
木有这个方法[/quote] spinner.setSelection(0, false);
小林望北 2016-01-14
  • 打赏
  • 举报
回复
引用 3 楼 u012185875 的回复:
为什么不用 setSelected(0,true)
木有这个方法
NowIWanaBe 2015-08-09
  • 打赏
  • 举报
回复
为什么不用 setSelected(0,true)
wushi91 2015-07-03
  • 打赏
  • 举报
回复
二楼是正解。好代码就是要这样
tcmakebest 2014-08-09
  • 打赏
  • 举报
回复
这也叫最简单,BS,应该这样: boolean first=true; if(first) { first=false;} else { 事件处理代码; }

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧