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

2019-07-22  本文已影响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()
    }
上一篇下一篇

猜你喜欢

热点阅读