Возможно ли создать два "setOnItemSelectedListeners" на Spinner? - PullRequest
0 голосов
/ 30 сентября 2010

У меня проблема с методом onItemSelected для Spinner. Нет проблем, если у меня только один спиннер. Я могу настроить слушателя на это. У меня БД хранится в sqlite. Есть таблица, в которой поле столбца содержит дату в формате год-месяц-дата. Затем я создал два вида Spinner. Один за месяц, а другой за год. Моя программа хочет показать запросы к базе данных на основе выбора из месяца и года.

Проблема теперь, если я устанавливаю слушателя только для месяца Spinner, он показывает запросы на основе месяца. Если я установлю слушателя на год Spinner, он показывает запросы на основе года. На самом деле я уже подготовил sql-запросы, соответствующие годам и месяцам. Но кажется, что прослушиватель OnItemSelected может принимать только один экземпляр за один раз. Я пытаюсь использовать monthview.getItemAtPosition (position) && yearview.getItemAtPosition (position), чтобы соответствовать обоим требованиям для месяца и года. Но это не удалось.

Я использую открытый класс xxx, расширяет xxx, реализует прослушиватель OnItemSelected и добавляю два метода.

spinner.setOnItemSelectedListener(new OnItemSelectedListener() 
{
    @Override
    public void onItemSelected(AdapterView<?> parent,
            View view, int pos, long id) 
    {
            // Do some stuff based onItemSelected
           }
}

Кто-нибудь знает, как достичь этой цели?

Проще говоря, у меня есть два счетчика, один для месяца, один для года, значения заполняются через arrayadapter. Затем я использую SimpleCusrsorAdapter для получения результата sql из базы данных sqlite. Затем я помещаю результат курсора в listadapter и связываю его со списком. Это работает без проблем, если я работаю с ним индивидуально по месяцам или годам, но не по обоим. Но кажется, что слушатель слушает только один экземпляр счетчика, а не два или более одновременно. Может быть, это общая проблема. Может быть, некоторые из вас уже сталкивались с этой проблемой раньше.

Или я могу использовать анонимный внутренний класс? Но я думаю, что это другой подход с тем же результатом. Если нет, то мне нужно использовать другую технику, если доступен только один слушатель?

Я хочу показать, например: -Я выбираю апрель и все годы, отображаются все записи за апрель (апрель за все годы) -Я выбираю 2010 и все месяцы, он отображает все записи в 2010 году (с января по декабрь 2010 года) -Я выбираю апрель и 2010, все записи отображаются только в апреле 2010

Спасибо за объяснения и предложения !!

Том С наилучшими пожеланиями,

Ответы [ 2 ]

0 голосов
/ 05 сентября 2011

Я не уверен на 100%, что у вас возникла проблема.

Посмотрите на название метода.

setOnItemSelectedListener

Ключом здесь является set part.Каждый раз, когда вы вызываете этот метод, вы переопределяете любые ранее сохраненные значения для этого объекта.

Но в ваших случаях вам кажется, что вам нужно вызвать метод один раз для каждого из двух счетчиков либо с анонимнымкласс (как вы делаете там) или с вашей деятельностью (которая сэкономит немного памяти, так как вам не нужно создавать два класса).

Как пример:

spinner1.setOnItemSelectedListener(classToReceiveTheSelection)
spinner2.setOnItemSelectedListener(classToReceiveTheSelection)

Если вам абсолютно необходимо иметь два разных класса, отвечающих на один и тот же OnItemSelected, это возможно, но несколько уродливо.

0 голосов
/ 01 октября 2010

Наконец, я решил эту проблему, используя getSelectedItemPosition (), чтобы получить значение и выполнить некоторую проверку решения.Затем программа запускается без проблем.

Но я также хочу знать, могу ли я использовать более двух setOnItemSelectedListener для Spinner или другого компонента пользовательского интерфейса?

Том

...