美文网首页
Android 设置Spinner 默认不选择任何值

Android 设置Spinner 默认不选择任何值

作者: 执念蓝枫 | 来源:发表于2019-07-22 17:13 被阅读0次
    思路:

    初始化Spinner时,Spinner会默认选择第一项。此时将第一项隐藏不显示,给人产生一种默认未选择任何值的感觉。

    自定义 Spinner

    使用原生Spinner控件时,该控件在连续点击同一个Item时,会触发setSelection方法,但不会触选择监听事件。所以此处我们可以重写setSelection方法,并手动调用监听事件。

    package com.daliang.daliangbao.views;
    
    import android.annotation.SuppressLint;
    import android.content.Context;
    import android.util.AttributeSet;
    import android.widget.Spinner;
    
    @SuppressLint("AppCompatCustomView")
    public class MySpinner extends Spinner {
    
        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){
               if (getOnItemSelectedListener() != null)
                    getOnItemSelectedListener().onItemSelected(this, getChildAt(position), position, 0);
            }
            lastPosition = position;
        }
    
        @Override
        public void setSelection(int position) {
            super.setSelection(position);
           if (getOnItemSelectedListener() != null)
                    getOnItemSelectedListener().onItemSelected(this, getChildAt(position), position, 0);
            }
            lastPosition = position;
        }
    }
    
    
    使用方法
     private fun initSpinner() {
    
            var isSpinnerFirst = true //是否是第一次选择的标志   初始化时会默认执行一次选择
            var selectedView: View? = null // 被选择的子view
    
            spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
                override fun onNothingSelected(parent: AdapterView<*>?) {
    
                }
    
                override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
    
                    if (isSpinnerFirst) {
                        // 初始化时不显示
                        view?.visibility = View.INVISIBLE
                    } else {
                        // 手动选择后显示布局
                        view?.visibility = View.VISIBLE
                    }
    
                    selectedView = view
                    isSpinnerFirst = false
                }
            }
    
            //判断被选择的view是否处于显示状态,是则取值
            if (selectedView?.visibility == View.VISIBLE)
                Toast.makeText(this, spinner.selectedItemPosition.toString(), Toast.LENGTH_SHORT).show()
        }
    

    相关文章

      网友评论

          本文标题:Android 设置Spinner 默认不选择任何值

          本文链接:https://www.haomeiwen.com/subject/kswwlctx.html