在Android中关闭Spinner的下拉列表

时间:2013-09-09 09:17:45

标签: android drop-down-menu android-spinner ontouchlistener

在Android中打开和关闭微调器时,我需要设置箭头图标的动画。 打开微调器时我可以旋转箭头:我只是在setOnTouchListener上放了一个Spinner

当下拉菜单关闭或隐藏时,问题就出现了,因为我不知道如何在该操作上设置监听器或类似内容。

如果可能,任何人都知道如何做到这一点?

提前多多感谢。

3 个答案:

答案 0 :(得分:2)

我不知道谷歌为什么不能这么做,但你可以这样解决问题:

您必须为Spinner覆盖受保护的方法“onDetachedFromWindow”,将其作为公共方法,并通过单击CustomSpinnerAdapter中的项目来调用它。

例如:

    public class CustomSpinner extends Spinner
    {
        Context context = null;

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

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

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

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

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

        @Override public void onDetachedFromWindow()
        {
            super.onDetachedFromWindow();
        }
    }

我希望您知道如何创建SpinnerCustomAdapter并在xml中插入此CustomSpinner。

答案 1 :(得分:1)

你可以这样做,

 boolean bflag=true;//declare it as public

     spinner.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View arg0, MotionEvent arg1) {
                // TODO Auto-generated method stub

                 if(bflag==true)
                {
                    //first animation code goes here
                    Toast.makeText(getActivity(), "on", Toast.LENGTH_SHORT).show();
                    bflag=false;
                }

                else
                {
                    //second animation code goes here
                    Toast.makeText(getActivity(), "off", Toast.LENGTH_SHORT).show();
                    bflag=true;
                }


                return false;
            }

        });

答案 2 :(得分:0)

试试这种方式

spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                // // called when spiner will closed

            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // called when spiner will closed

            }
        });