zoukankan      html  css  js  c++  java
  • 带点击事件的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会更加合理

  • 相关阅读:
    浏览器打开developers.weixin.qq.com开头的网站加载特别慢或者无法打开
    微信小程序在微信开发者工具中打开时为何提示“小程序重启耗时过久,请确认业务逻辑中是否有复杂运算,或者死循环”?
    解决VMware Workstation 15 与Device/Credential Guard不兼容的问题
    Gitee同步项目后内容一致MD5不同
    Python2.7安装easy_install和pip
    php连接数据库
    css画三角形
    css的9个常用选择器
    Javafx弹窗
    javafx将数据库内容输出到tableview表格
  • 原文地址:https://www.cnblogs.com/haoxiqiang/p/3123786.html
Copyright © 2011-2022 走看看