Android Spinner监听列表展开和收起状态

Spinner只提供展开的监听,并未提供收起的监听

有时候需要监听Spinner列表的收起,比如根据展开收起的状态,改变右边显示的arrow图标的方向

我们可以通过自定义Spinner来监听列表的展开和收起

自定义Spinner

java 复制代码
public class CustomSpinner extends Spinner {

    private OnSpinnerEventsListener mListener;
    private boolean mOpenInitiated = false;

    public CustomSpinner(Context context, AttributeSet attrs, int defStyleAttr, int mode) {
        super(context, attrs, defStyleAttr, mode);
    }

    public CustomSpinner(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public CustomSpinner(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomSpinner(Context context, int mode) {
        super(context, mode);
    }

    public CustomSpinner(Context context) {
        super(context);
    }

    public interface OnSpinnerEventsListener {
        void onSpinnerOpened();
        void onSpinnerClosed();
    }

    public void setSpinnerEventsListener(OnSpinnerEventsListener onSpinnerEventsListener) {
        mListener = onSpinnerEventsListener;
    }

    @Override
    public boolean performClick() {
        mOpenInitiated = true;
        if (mListener != null) {
            mListener.onSpinnerOpened();
        }
        return super.performClick();
    }

    public void performClosedEvent() {
        mOpenInitiated = false;
        if (mListener != null) {
            mListener.onSpinnerClosed();
        }
    }

    public boolean hasBeenOpened() {
        return mOpenInitiated;
    }

    @Override
    public void onWindowFocusChanged(boolean hasWindowFocus) {
        super.onWindowFocusChanged(hasWindowFocus);
        if (hasBeenOpened() && hasWindowFocus) {
            performClosedEvent();
        }
    }
}

使用

java 复制代码
customSpinner.setSpinnerEventsListener(new CustomSpinner.OnSpinnerEventsListener() {
    @Override
    public void onSpinnerOpened() {
        // 展开
    }

    @Override
    public void onSpinnerClosed() {
        // 收起
    }
});
相关推荐
_李小白1 小时前
【Android FrameWork】延伸阅读: Android应用安装过程
android
光头闪亮亮2 小时前
Android手持机扫码出入库的开发详解-6.APP下载更新
android
光头闪亮亮2 小时前
Android手持机扫码出入库的开发详解-7.SQLite CRUD操作
android
键来大师2 小时前
Android16 设置壁纸出现APK重启问题和悬浮控件等图标变成黑色图框
android·framework·rk3576
_李小白2 小时前
【Android FrameWork】第四十二天:PMS main函数
android
BoomHe3 小时前
Android LMK(Low Memory Killer)机制
android
时光呀时光慢慢走3 小时前
MAUI 开发安卓 MQTT 客户端:实现远程控制 (完整源码 + 避坑指南)
android·物联网·mqtt·c#
成都大菠萝4 小时前
2-2-44 快速掌握Kotlin-函数类型操作
android
有位神秘人4 小时前
Android中获取设备里面的音频文件
android
2501_915918415 小时前
使用 HBuilder 上架 iOS 应用时常见的问题与应对方式
android·ios·小程序·https·uni-app·iphone·webview