2016-12-12 8 views
2

У меня есть работа, где мне нужно создать 1 или более динамиков динамически в соответствии с внешней БД.Как установитьOnItemSelectedListener на несколько динамически созданных прядильщиков

SOme этих элементов-счетчиков должен отображать диалоговое окно в соответствии с тем, какое значение имеет счетчик. Например, счетчик имеет следующие возможности: -Own -Rental -Family House Если пользователь выбирает аренду, я должен показать диалог (или что-нибудь еще), спрашивающий его, сколько он платит в месяц. Если он выбирает собственную или семью, ничего не должно произойти.

После того как я создать макет с прядильщиками, edittexts и т.д. Im используя что-то вроде этого:

for(int q=0;q<=parent.getChildCount();q++){ 

     View v = parent.getChildAt(q); 
     if (v instanceof Spinner) { 
      Spinner res = (Spinner) v; 
      res.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
       public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 
        //Here its supposed to show dialog if the option is "RENT" 
       } 

       public void onNothingSelected(AdapterView<?> adapterView) { 
        return; 
       } 
      }); 
     } 
    } 

Проблемы заключается в том, что, когда я делаю это «setOnItemSelectedListener» устанавливает только за последние блесны на раскладка.

Как я могу сделать то, что я пытаюсь? Я не знаю, что еще делать.

ответ

0

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

//This goes outside of the method 
private AdapterView.OnItemSelectedListener listener = 
     new AdapterView.OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
     System.out.println("Spinner Selected ID = " + parent.getId()); 
     /* 
     Put a check here for which one is being selected. 
     While you could use the parent to check, in your case, it will be easier 
     to use something from your DB table as a unique identifier (maybe a column 
     name would be ideal? Your pick) 
     */ 
     //Show your dialogs here 
    } 
    @Override 
    public void onNothingSelected(AdapterView<?> parent) { 
     return; 
    } 
}; 

//This is the method you have where you are iterating the parent object 
private void doStuff(){ 
    for(int q=0;q<=parent.getChildCount();q++){ 
     View v = parent.getChildAt(q); 
     if (v instanceof Spinner) { 
      Spinner res = (Spinner) v; 
      res.setOnItemSelectedListener(listener); 
     } 
    } 
} 

Удачи я!

+0

То же самое происходит. Это относится только к последнему счетчику. –

+0

Я только что написал некоторый тестовый код, и кажется, что он работает на моем конце. Пара вопросов, является ли проблема, что прослушиватель кликов не регистрируется? Или это то, что данные не установлены правильно в прядильщиках? Или что-то другое? – Silmarilos

+0

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