当前位置: 移动技术网 > IT编程>移动开发>Android > Android解决Spinner初始化时自动选择第一个 item 及点击已选中的 item 时不触发Listener问题

Android解决Spinner初始化时自动选择第一个 item 及点击已选中的 item 时不触发Listener问题

2018年09月19日  | 移动技术网IT编程  | 我要评论

603027,g55高速,买手机充值卡

spinner 这个控件是我目前在开发中遇到的特性最奇怪的控件了,说它奇怪是指有点反直觉,比如说,为什么初始化时要自动选择第一个 item?以及为什么同一个 item 选中第二次的时候不触发 onitemselectedlistener?重复选中也是选中呀!下面说下是如何解决这个问题的。

增加一个默认为 true 的全局变量,用来作为判断是否为初始化自动选中的标志位。 重写 spinner 的 setselection 方法。
spinner.setonitemselectedlistener(new adapterview.onitemselectedlistener() {
            @override
            public void onitemselected(adapterview parent, view view, int position, long id) {
                logger.d(this,"spinner position =  "+ position);
                if (isinitial) {
                    isinitial = false;
                    return;
                }
                logger.d(this, "spinner 被触发了");

                // do sth here...
            }

            @override
            public void onnothingselected(adapterview parent) {

            }
        });
public class myspinner extends android.support.v7.widget.appcompatspinner {

    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){
            getonitemselectedlistener().onitemselected(this,null,position,0);
        }
        lastposition = position;
    }

    @override
    public void setselection(int position) {
        super.setselection(position);
        if (position == lastposition){
            getonitemselectedlistener().onitemselected(this,null,position,0);
        }
        lastposition = position;
    }
}

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网