Spinner onItemSelected вызван по ошибке (без действий пользователя) - PullRequest
25 голосов
/ 26 февраля 2011

У меня есть счетчик, который я показываю в диалоговом окне, и в момент запуска диалога onItemSelected вызывается. Я действительно не хочу обрабатывать это, но только когда пользователь делает выбор. Поэтому мне либо нужно это предотвратить (может быть, потому что не задано значение по умолчанию?), Либо мне нужно знать, что это не тот пользователь, который делает этот выбор?

Ответы [ 14 ]

1 голос
/ 13 марта 2018

Вы можете попытаться установить счетчик, используя два аргумента, например:

spinner.setSelection(count, false);

Итак, поставьте это перед установленным OnItemSelectedListener:

spinner.setSelection(0,false);

Вы можете проверить больше изстраница разработчиков:

https://developer.android.com/reference/android/widget/Spinner.html

1 голос
/ 14 марта 2015

Вы должны сделать так. Последовательность - это ключ.

spinner.setAdapter(adapter);
spinner.setSelection(position);
spinner.setOnItemSelectedListener(listener);
1 голос
/ 03 января 2012

Я также искал хорошее решение в интернете, но не нашел ни одного, который бы удовлетворял мои потребности. Поэтому я написал это расширение для класса Spinner, чтобы вы могли установить простой OnItemClickListener, который ведет себя так же, как ListView.

Только когда элемент «выделен», вызывается onItemClickListener.

Веселитесь вместе с ним!

public class MySpinner extends Spinner
{
    private OnItemClickListener onItemClickListener;


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

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

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

    @Override
    public void setOnItemClickListener(android.widget.AdapterView.OnItemClickListener inOnItemClickListener)
    {
        this.onItemClickListener = inOnItemClickListener;
    }

    @Override
    public void onClick(DialogInterface dialog, int which)
    {
        super.onClick(dialog, which);

        if (this.onItemClickListener != null)
        {
            this.onItemClickListener.onItemClick(this, this.getSelectedView(), which, this.getSelectedItemId());
        }
    }
}
0 голосов
/ 10 февраля 2017

Если вы не возражаете против использования позиции для приглашения, вы можете делать что-то подобное каждый раз, когда захотите сделать ставку на вертушку.Сначала установите выделение на приглашение:

spinner.setselected(0);
spinner.add("something");
...

А затем сделайте что-нибудь подобное, когда произойдет выделение:

spinner.ItemSelected += (object sender, AdapterView.ItemSelectedEventArgs e) => 
            {
                if (spinner.SelectedItemPosition != 0)
                {
                   //do staff
                } 
            }
...