Android Spinner监听重复选择某一项的方法
来源:互联网 发布:清楚淘宝浏览记录 编辑:程序博客网 时间:2024/06/05 11:30
问题
使用Android SDK自带的Spinner控件时,如果当前已经选中了一项,再次点开Spinner的下拉菜单并选中相同一项时,不会触发OnItemSelectedListener
的onItemSelected()回调方法,因此无法获知用户再次选中了相同项.一般情况下,如果用户选中相同项,我们确实不需要做任何操作,因此也就不关心该项是否再次
被用户选择.但是有些时候,仍需要获取这样的监听.比如一个Spinner的菜单是本日,本周,本月,自定义时,当用户选中自定义
时间段后,想再次改变
自定义的时间段,此时Spinner并不能触发再次点击自定义
项的回调.问题由此而来.
解决办法
网上有很多相关解决办法,还有说不用Spinner转而用PopupWindow+ListView手动实现一个的.目前看来一下方法最简单:
使用自定义的ReSpinner
,继承自Spinner.当相同项被选中时,手动触发OnItemSelectedListener的onItemSelected()方法.代码如下:
import android.content.Context; import android.util.AttributeSet; import android.widget.Spinner; public class ReSpinner extends Spinner { public boolean isDropDownMenuShown=false;//标志下拉列表是否正在显示 public ReSpinner(Context context) { super(context); } public ReSpinner(Context context, AttributeSet attrs) { super(context, attrs); } public ReSpinner(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public void setSelection(int position, boolean animate) { boolean sameSelected = position == getSelectedItemPosition(); super.setSelection(position, animate); if (sameSelected) { // 如果选择项是Spinner当前已选择的项,则 OnItemSelectedListener并不会触发,因此这里手动触发回调 getOnItemSelectedListener().onItemSelected(this, getSelectedView(), position, getSelectedItemId()); } } @Override public boolean performClick() { this.isDropDownMenuShown = true; return super.performClick(); } public boolean isDropDownMenuShown(){ return isDropDownMenuShown; } public void setDropDownMenuShown(boolean isDropDownMenuShown){ this.isDropDownMenuShown=isDropDownMenuShown; } @Override public void setSelection(int position) { boolean sameSelected = position == getSelectedItemPosition(); super.setSelection(position); if (sameSelected) { getOnItemSelectedListener().onItemSelected(this, getSelectedView(), position, getSelectedItemId()); } } @Override public void onDetachedFromWindow() { super.onDetachedFromWindow(); } }
相关参考
原文链接 http://www.trojx.me/2017/02/17/spinner-reselect/
How can I get an event in Android Spinner when the current selected item is selected again?
0 0
- Android Spinner监听重复选择某一项的方法
- Android中spinner的监听问题
- Android项目技术总结:项目中选择任务的联系人引出android的spinner的监听问题
- Spinner的监听
- 下拉列表Spinner以及选择监听
- ListView的两种监听某一项的单击事件的方法
- 2014-11-6Android学习------Spinner下拉选择框控件学习(二)---监听事件
- android Spinner的基本实现方法
- android 下拉选择框Spinner
- android 下拉选择框Spinner
- android 监听某一组件的按下和松开状态
- android 获得监听某一广播的所有程序
- android入门-------案例九(下拉选择spinner的使用)
- Android如何愉快的使用Spinner列表选择框
- 一看就会Android之用户选择列表项Spinner
- Android中Spinner根据value来选择选中项
- Android控件Spinner监听之绑定ImageView
- 获取spinner的默认选择项的value
- Vbs脚本经典教材
- mysql触发器
- input:-webkit-autofill 导致chrome的输入框背景颜色变成黄色
- 用CSS和JavaScript改变样式的区别
- JSP tld文件配置 自定义标签简单示例
- Android Spinner监听重复选择某一项的方法
- QStyledItemDelegate
- Cocos2dx杂记:如何显示中文
- 【蓝牙】CSR8670的DFU功能
- springMVC与Struts2的对比
- Java子类初始化与基类的关系
- [Leetcode] #232 Implement Queue using Stacks
- VS Code折腾记 - (4) 常用必备插件推荐【前端】
- js中关于打印的一些知识