Закрытие раскрывающегося списка в Spinner на Android

Мне нужно анимировать значок стрелки при открытии и закрытии счетчика в Android. Я могу вращать стрелку при открытии счетчика: я просто поставил setOnTouchListener на Spinner.

Проблема возникает, когда раскрывающийся список закрыт или скрыт, потому что я не знаю, как установить слушателя или что-то в этом роде для этого действия.

У кого-нибудь есть идея о том, как это сделать, если это возможно?

Заранее большое спасибо.


person noloman    schedule 09.09.2013    source источник


Ответы (3)


Не знаю, почему гугл так долго не может, но решить проблему можно так:

Вы должны переопределить защищенный метод «onDetachedFromWindow» для Spinner, сделать его общедоступным и вызвать его, щелкнув элемент в вашем 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 и вставить этот CustomSpinner в xml.

person cosic    schedule 14.01.2014

Вы можете сделать что-то вроде этого,

 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;
            }

        });
person Basim Sherif    schedule 09.09.2013
comment
это все еще не работает. При щелчке в любой части экрана — и, таким образом, Android закрывает счетчик — это не срабатывает. - person noloman; 09.09.2013
comment
потрясающий подход для достижения открытия / закрытия спиннера - person Binesh Kumar; 28.12.2017

попробуйте так

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

            }
        });
person Biraj Zalavadia    schedule 09.09.2013