603027,g55高速,买手机充值卡
spinner 这个控件是我目前在开发中遇到的特性最奇怪的控件了,说它奇怪是指有点反直觉,比如说,为什么初始化时要自动选择第一个 item?以及为什么同一个 item 选中第二次的时候不触发 onitemselectedlistener?重复选中也是选中呀!下面说下是如何解决这个问题的。
增加一个默认为 true 的全局变量,用来作为判断是否为初始化自动选中的标志位。 重写 spinner 的 setselection 方法。spinner.setonitemselectedlistener(new adapterview.onitemselectedlistener() { @override public void onitemselected(adapterview parent, view view, int position, long id) { logger.d(this,"spinner position = "+ position); if (isinitial) { isinitial = false; return; } logger.d(this, "spinner 被触发了"); // do sth here... } @override public void onnothingselected(adapterview parent) { } });
public class myspinner extends android.support.v7.widget.appcompatspinner { private static final string tag = "ybz_spinner"; private int lastposition = 0; public myspinner(context context, int mode) { super(context, mode); } public myspinner(context context, attributeset attrs) { super(context, attrs); } public myspinner(context context, attributeset attrs, int defstyleattr) { super(context, attrs, defstyleattr); } public myspinner(context context, attributeset attrs, int defstyleattr, int mode) { super(context, attrs, defstyleattr, mode); } // 一个 item 选中的时候,总是会触发 setselection 方法 // 所以在这个方法中,我们记录并检查上一次的selection position 就行了,如果是相同的,手动调用监听即可 @override public void setselection(int position, boolean animate) { super.setselection(position, animate); if (position == lastposition){ getonitemselectedlistener().onitemselected(this,null,position,0); } lastposition = position; } @override public void setselection(int position) { super.setselection(position); if (position == lastposition){ getonitemselectedlistener().onitemselected(this,null,position,0); } lastposition = position; } }
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Android apk 项目一键打包并上传到蒲公英的实现方法
Android 自定义LineLayout实现满屏任意拖动功能的示例代码
android 限制某个操作每天只能操作指定的次数(示例代码详解)
Android 集成 google 登录并获取性别等隐私信息的实现代码
网友评论