web版本的项目中有这样一个功能,动态添加联系人,并且可以修改,如下图:

                                               

可以由上面四图明显可以看出web上面的联系人功能,最多可以有七个列表,每个列表选择好了以后,又可以修改,如d图。前面选择好的联系人,后面则不能选,因为没有数据。

移植到android:

我在android上想要实现这样一个功能,一个Activity中有一个spinner,当我点击spinner其中的某一条的时候便弹出一个对话框。
于是我想到了setOnItemClickListener这个方法,测试发现有异常,一查源码发现:A spinner does not support item click events. Calling this method will raise an exception. 所以觉得这条路可能是走不同了。
于是我便实现了这个方法:setOnItemSelectedListener,下面是我的关键代码:
taskContactsSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {

public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                    AlertDialog.Builder builder = new AlertDialog.Builder(SpinnerTest.this);    
                    builder.setTitle("Contacts");
                            builder.setItems(mItems, new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                 //点击后弹出窗口选择了第几项
                                 new AlertDialog.Builder(SpinnerTest.this)
                                 .setMessage("你选择的id为" + which + " , " + mItems[which])
                                 .show();
                            }
                        }).show();
            }

public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub
                
            }
        });
以上代码中的onItemSelected方法里面的语句为弹出一个对话框。
测试发现:当我一进入Activity的时候,onItemSelected中的语句便自动执行了,而我要的效果是,只有当我点击spinner中的某一条的时候,才能弹出该对话框。看到网上很多人说可以setSelect(0,false)可以防止一开始进入Activity便执行onItemSelected中的语句,表面上看效果是的,但实际上这样做只是掩耳盗铃,很多人可以发现,这样做了以后打开spinner点击第一条是没有动作执行的,只有点击其他的条数在反过来点击第一条才会有反映,但是如果前后两次点击相同的条目的话,第二次的点击也是无效的,那这是为什么呢?
带着这个疑问,我又查看了源码发现:onItemSelected这个方法是当spinner中的内容有改变的时候才会触发,虽然我们表面上spinner的数据没有什么变化,但是当我们点击的条目的id变化时,其内部是看作spinner有变化的,关键代码:
 if (mDataChanged) {
            handleDataChanged();
        }
既然如此,便可以解释上面的问题了,两次点击同样的条目,是没有任何动作会发生的。一开始进入Activity的时候,spinner中有了数据肯定也是变化了,所以便会执行onItemSelected中的语句,所以一开始便会弹出一个对话框。
后来我又想到加入boolean标志来判断是否第一次进入activity等方法,发现效果都不能达到想象中的。

转载于:https://www.cnblogs.com/duancanmeng/archive/2012/02/23/2524640.html

Android项目技术总结:项目中选择任务的联系人引出android的spinner的监听问题相关推荐

  1. android中对sim卡联系人的增删改查以及监听sim卡联系数据的改变

    sim卡联系人的增删改查主要是通过ContentProvider来进行操作的,在android中对sim卡联系人操作的provider是定义在IccProvider.java这个类中的,这个类位于an ...

  2. mat opencv 修改roi_OpenCV Android:在新Mat中定义并保存ROI(OpenCV Android: Define and save ROI in new Mat)...

    OpenCV Android:在新Mat中定义并保存ROI(OpenCV Android: Define and save ROI in new Mat) 我正在尝试将我的图像的一部分切割(裁剪)到另 ...

  3. android横竖屏切换布局闪退,Android-Activity横竖屏切换不杀死Activity 并监听横竖屏切换...

    在上一篇博客,Android-Activity临时数据的保存,中讲解到,当发生横竖屏切换的时候,系统会杀死Activity并重新启动Activity 系统会杀死Activity 12-12 08:11 ...

  4. 请教 indy 中的 tldUdpServer 如何实现对本地端口6100进行监听!

    请教 indy 中的 tldUdpServer 如何实现对本地端口6100进行监听! Delphi / Windows SDK/API http://www.delphi2007.net/Delphi ...

  5. Android 如何从系统图库中选择图片

     这几天我都在做Android的App,同时学习它的API,我将分享一些我学到的东西,比如: 如何从系统图库中选择图片. 首先,让我们来看看如何将手机系统图库集成到你的App中,然后再从图库中选择 ...

  6. 【Android 电量优化】电量优化 ( 充电状态获取 | 主动获取充电状态 | 广播接受者监听充电状态 | 被动获取充电状态 | 注册空广播接受者获取历史广播 )

    文章目录 一.获取充电状态 二.被动获取充电状态 三.主动获取充电状态 参考 Google 官方文档 : 优化电池续航时间 一.获取充电状态 在应用中执行某些操作 , 如软件云端备份 , 从服务器端获 ...

  7. flutter中state生命周期与app生命周期与路由监听

    State生命周期 1.第一次展示到屏幕上时会依次调用当前element的构造函数,initState,didChangeDependencies,build 2.如果只是自己发生了更新,则只会回调b ...

  8. vue中实现全屏以及对退出全屏的监听

    前言: vue中实现默认进来页面,某个div全屏,并监听退出全屏的次数,当退出全屏次数达到5的时候跳转到别的页面. 目录: 实现步骤: 1.页面上在你想要的容器上加上id = 'con_lf_top_ ...

  9. Android OkHttp+RxJava 史上最优雅的实现文件上传/下载进度的监听

    本文已授权「刘望舒」微信公众号独家原创发布 前言 本文将直接使用RxHttp库实现文件上传.下载.断点下载.进度的监听,不对RxHttp做过多讲解,如果对RxHttp不了解,请移步 RxHttp 一条 ...

最新文章

  1. 利用ashx和ajax实现表格的异步填充
  2. File类判断和获取功能
  3. linux设备驱动程序调试方法,Linux设备驱动程序学习(2)-调试技术
  4. ajax静态加载图片,JQuery实现Ajax加载图片的方法
  5. 2021牛客暑期多校训练营4,签到题CFIJ
  6. (转载)C/C++:sizeof('a')的值为什么不一样?
  7. c语言语法大全,oc语言基本语法汇总分析
  8. 手机桌面便签怎么绑定手机号?
  9. vue xlsx插件导入
  10. 计算机取消右键粘贴,复制粘贴文件后鼠标右击取消粘贴功能的简单方法介绍
  11. python做淘宝客_python 做淘宝客程序(2)
  12. OpenWiFi简介与学习记录
  13. js实现页面视频监控全屏
  14. Mac修改默认的电子邮箱客户端
  15. Machine Learning | (1) Scikit-learn与特征工程
  16. 如何将照片黑白化,照片怎么变黑白色?
  17. 手机、平板与手表,华为一个都不能少
  18. Java基础笔记:Day_10 接口、匿名内部类
  19. 人员梯度培养_人才梯队培养计划方案
  20. 拉勾教育 重学数据结构与算法 08 | 字符串:如何正确回答面试中高频考察的字符串匹配算法?

热门文章

  1. 2/100. Hamming Distance
  2. POJ 3687 Labeling Balls
  3. .zip.001 -- .zip.003解压缩
  4. 修改NLS_DATE_FORMAT的四种方式
  5. 【转】 android sdk setup时出现:Failed to fetch URL
  6. Vue 视频播放插件vue-video-player
  7. JS原生 实现图片懒加载
  8. 下载并使用阿里图标库
  9. android 手势事件 重写,Android实现通过手势控制图片大小缩放的方法
  10. Python(7):__init__.py