带点击事件的Spinner

最近有一个蛋疼的需求,在下拉框中,如果只有一个值,默认显示出来,有两个或者没有显示请选择,没有点击不弹框,但是要清空,两个点击开要移掉请选择字样的项

本来以为很简单,后来发现没有OnClickListener,没办法,重写了一个Spinner

public class CSIISpinner extends Spinner {
 
    public CSIISpinner(Context context) {
        super(context);
    }
 
    public CSIISpinner(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
 
    public CSIISpinner(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
 
    private boolean isMoved = false;
    private Point touchedPoint = new Point();
    
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int x = (int) event.getRawX();
        int y = (int) event.getRawY();
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN :
                touchedPoint.x = x;
                touchedPoint.y = y;
                break;
            case MotionEvent.ACTION_MOVE :
                isMoved = true;
                break;
            case MotionEvent.ACTION_UP :
                if (isMoved) {
                    // 从上向下滑动
                    if (y - touchedPoint.y > 20) {
                    }
                    // 从下向上滑动
                    else if (touchedPoint.y - y > 20) {
                    }
                    // 滑动幅度小时,当作点击事件
                    else {
                        onClick();
                    }
                    isMoved = false;
                } else {
                    onClick();
                }
                break;
            default :
                break;
        }
        return true;
    }
 
    private void onClick() {
        if (OnClickListener != null && isEnabled()) {
            OnClickListener.onClick();
        }
    }
 
    private OnClickListener OnClickListener;
 
    /**
     * 注册自定义的点击事件监听 
     * 
     * @param onClickMyListener
     */
    public void setOnClickListener(OnClickListener OnClickListener) {
        this.OnClickListener = OnClickListener;
    }
 
    /**
     * 自定义点击事件监听.
     */
    public interface OnClickListener {
        public void onClick();
    }
}

后来发现这个用起来确实可以实现,但是不足之处就是太繁琐了

调用如下

subadapter = new ArrayAdapter<SubAccount>(NoticeDepositDrawPreActivity.this,R.layout.spinner_simple_item,subAccountList);
subadapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner_subacno.setAdapter(subadapter);
spinner_subacno.setPrompt("--请选择分账号序号--");
spinner_subacno.setOnClickListener(new CSIISpinner.OnClickListener() {
//此处新增一部分逻辑控制分账序号显示
@Override
public void onClick() {
if(subAccountList.size()==1&&subAccountList.get(0).getFenAcctNo().contains("请选择分账号序号")){
Component.alertDialog(NoticeDepositDrawPreActivity.this, "该帐号下面没有分账号信息");
subAccountList.get(0).setFenAcctNo("");
subadapter.notifyDataSetChanged();
}else{
if(subAccountList.get(0).getFenAcctNo().contains("请选择分账号序号")){
subAccountList.remove(0);
}
if("".equals((subAccountList.get(0).getAvailBal()))){
tv_balance.setText("");
}else{
tv_balance.setText(subAccountList.get(0).getAvailBal()+ "元");
}
ubadapter.notifyDataSetChanged();
spinner_subacno.performClick();
}

});
spinner_subacno.setOnItemSelectedListener(new OnItemSelectedListener() {

@Override
public void onItemSelected(AdapterView<?> parent,View view, int position, long id) {
tv_balance.setText(subAccountList.get(position).getAvailBal()+ "元");
if("".equals((subAccountList.get(position).getAvailBal()))){
tv_balance.setText("");
}else{
tv_balance.setText(subAccountList.get(position).getAvailBal()+ "元");
}
}

@Override
public void onNothingSelected(AdapterView<?> parent) {

}
});

好烦,将就用吧,有时间研究研究重写Spinner的Adapter怎么写,应该能控制Adapter会更加合理

转载于:https://www.cnblogs.com/haoxiqiang/archive/2013/06/07/3123786.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376622.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux进程间通信快速入门【二】:共享内存编程(mmap、XSI、POSIX)

文章目录mmap内存共享映射XSI共享内存POSIX共享内存参考使用文件或管道进行进程间通信会有很多局限性&#xff0c;比如效率问题以及数据处理使用文件描述符而不如内存地址访问方便&#xff0c;于是多个进程以共享内存的方式进行通信就成了很自然要实现的IPC方案。LInux给我们提…

ROBOTS.TXT屏蔽笔记、代码、示例大全

自己网站的ROBOTS.TXT屏蔽的记录&#xff0c;以及一些代码和示例&#xff1a; 屏蔽后台目录&#xff0c;为了安全&#xff0c;做双层管理后台目录/a/xxxx/&#xff0c;蜘蛛屏蔽/a/&#xff0c;既不透露后台路径&#xff0c;也屏蔽蜘蛛爬后台目录 缓存&#xff0c;阻止蜘蛛爬静态…

五大主流浏览器 HTML5 和 CSS3 兼容性比较

转眼又已过去了一年&#xff0c;在这一年里&#xff0c;Firefox 和 Chrome 在拼升级&#xff0c;版本号不断飙升&#xff1b;IE10 随着 Windows 8 在去年10月底正式发布&#xff0c;在 JavaScript 性能和对 HTML5 和 CSS3 的支持方面让人眼前一亮。这篇文章给大家带来《五大主流…

Ubuntu下将Sublime Text设置为默认编辑器

转自将Sublime Text 2设置为默认编辑器 修改defaults.list 编辑/etc/gnome/default.list文件&#xff0c;将其中的所有gedit.desktop替换为sublime_text.desktop。 sublime_text.desktop在/opt/sublime_text目录下&#xff0c;使用ls -al *sublime*命令查看具体文件名。 转载于…

python获取最近N天工作日列表、节假日列表

# 获取最近两周工作日列表、节假日列表 import datetime import chinese_calendar import time import pandas as pd# 将时间戳转换成格式化日期 def timestamp_to_str(timestampNone, format%Y-%m-%d %H:%M:%S):if timestamp:time_tuple time.localtime(timestamp) # 把时间…

保存页面的浏览记录

我的设计思想是将用户的浏览记录保存到cookie里面&#xff0c;然后根据情况处理。cookie里面的数据格式是json格式&#xff0c;方便根据自己的需要添加或者修改属性。引用了3个js文件,下载地址如下。 https://github.com/carhartl/jquery-cookie/blob/master/jquery.cookie.js …

开窍小老虎,一步一个脚印之 初识汇编(一)

最近一直浸淫在计算机编程中无法自拔。哲学 认识论中讲过。人类的求知的过程是由两次飞跃。第一是从感性认识到理性认识&#xff1b;第二是从理性认识到实践。这段话对有些人是适用的。我就是其中的一名。在知乎上求助问题“学计算机要懂汇编吗&#xff1f;”&#xff0c;地下有…

python脚本 请求数量达到上限,http请求重试

由于在内网发送http请求同一个token会限制次数&#xff0c;所以很容易达到网关流量上限。 业务中使用了多线程并发&#xff0c;一个线程发起一次http请求&#xff0c;得到正确结果后返回。这里采用的策略是&#xff0c;如果解析出来达到流量上限&#xff0c;那么该线程休眠一段…

shell 字符串操作

string"abcABC123ABCabc" 字符串长度: echo ${#string} #15 echo expr length $string #15 索引 用法&#xff1a;expr index $string $substring expr index $string "ABC" #4 提取子串 用法&#xff1a;${string:position} echo ${string:3} #A…

Linux 之目录 -鸟哥的Linux私房菜

因为利用 Linux 来开发产品或 distributions 的社群/公司与个人实在太多了, 如果每个人都用自己的想 法来配置档案放置的目录,那么将可能造成很多管理上的困扰。 你能想象,你进入一个企业之后,所 接触到的 Linux 目录配置方法竟然跟你以前学的完全不同吗? 很难想象吧~所以,后来…

python脚本:向表中插入新数据,删除表中最旧的数据

一张表存储历史数据&#xff0c;最多存储HISTORY_TABLE_MAX_ROWS条数据&#xff0c;当表中数据未达到HISTORY_TABLE_MAX_ROWS&#xff0c;直接插入&#xff1b;如果达到的话需要保证插入新数据的时候将最旧的数据删除 这里使用先update最新数据&#xff0c;然后再重新update全表…

精通 VC++ 实效编程280例 - 02 菜单和光标

菜单和关闭时重要的 Windows 资源之一。SDK 中&#xff0c;用 HCURSOR 和 HMENU 分别表示菜单和光标的句柄。MFC 中&#xff0c;CMenu 类封装了菜单的功能。 23 动态添加和删除菜单项 添加菜单项可以调用 CMenu::AppendMenu 或 CMenu::InserMenu 函数&#xff0c;删除菜单项可以…

POJ 1860: Currency Exchange 【SPFA】

套汇问题&#xff0c;从源点做SPFA&#xff0c;如果有一个点入队次数大于v次&#xff08;v表示点的个数&#xff09;则图中存在负权回路&#xff0c;能够套汇&#xff0c;如果不存在负权回路&#xff0c;则判断下源点到自身的最长路是否大于自身&#xff0c;使用SPFA时松弛操作…

python脚本:判断字符是否为中文

# 判断字符是否为中文 def is_chinese(ch):if u\u4e00 < ch < u\u9fff:return Trueelse:return False

Android 广播 Broadcast学习

Android Broadcast 广播 进程内本地广播 如果你是在你的应用之内使用广播&#xff0c;即不需要跨进程&#xff0c;考虑使用LocalBroadcastManager &#xff0c;这样更有效率&#xff08;因为不需要跨进程通信&#xff09;&#xff0c;并且你不用考虑一些其他应用可以发送或接收…

python:将时间戳转换成格式化日期

import time # 将时间戳转换成格式化日期 def timestamp_to_str(timestampNone, format%Y-%m-%d %H:%M:%S):if timestamp:time_tuple time.localtime(timestamp) # 把时间戳转换成时间元祖result time.strftime(format, time_tuple) # 把时间元祖转换成格式化好的时间retur…

WebApp 里Meta标签大全

1.先说说mate标签里的viewport&#xff1a; viewport即可视区域&#xff0c;对于桌面浏览器而言&#xff0c;viewport指的就是除去所有工具栏、状态栏、滚动条等等之后用于看网页的区域。对于传统WEB页面来说&#xff0c;980的宽度在iphone上显示是很正常的&#xff0c;也是满屏…

python:封装CRUD操作

# 封装数据库操作 def SELECT(db, cursor, sql):try:# 执行SQL语句db.ping(reconnectTrue)cursor.execute(sql)# 获取所有记录列表results cursor.fetchall()logging.debug("select commit")except:logging.error(sql)logging.error("select 语句执行出错"…

我的osu游戏程序设计(oo)

osu是一款社区元素为主旨的音乐游戏,由澳大利亚人Dean Herbert (peppy)独立制作并运行. 游戏的方法简单,就是 1. 圈圈(Circle)&#xff1a;圈圈(Circle) 50。没打中显示X,并减少生命值。圈中序号的最后一个的300、100会显示为激300、喝100。2.滑条(Slider) : 在开始端点击按住不…

影像数据库调研

参考Paul Graham比较各种编程语言的方法&#xff0c;我们比较各种数据库的特点如下&#xff1a; Oracle: 我们需要企业级数据库。 MySQL: Oracle不开源。 PostgreSQL: MySQL的功能不够多。 SQLite: 你可以把我嵌入到任何地方。这样&#xff0c;4种数据库够大家用了。 MongoDB: …