2012-06-01 3 views
3

Возможно ли собрать список или найти все Spinner, которые соответствуют спецификации?найти все прядильщики, которые соответствуют тегу

Я бы хотел, чтобы пользователь мог добавлять новые Spinner виджетов на лету, но мне нужно иметь возможность динамически получать значения из каждого Spinner.

В jQuery, я могу выбрать все элементы, соответствующие классу, по $('.myClassSelector').each(). Можете ли это или что-то подобное сделать в Android?

UPDATE Все обтекатели в определенном LinearLayout, указанный в XML. Макет используется как контейнер для всех прядильщиков.

+0

Прогулка по основному дереву макета, ищущему прядильщики. –

+0

Можете ли вы дать немного больше информации о своем требовании? например, мы можем добавить все счетчики в один и тот же линейный макет, который уже существует в xml, или нам нужно добавить их в различное расположение по требованию. –

+0

Обновлено сообщение; все они добавляются в 'LinearLayout', указанный в XML. – Cody

ответ

3

Я думаю, вы можете получить все дочерние элементы макета, в которые вы ранее добавили Spinner, и проверить, является ли ребенок Spinner или нет.

LinearLayout ll = //Your Layout this can be any Linear or Relative layout 
        //in which you added your spinners at runtime ; 

    int count = ll.getChildCount(); 
    for(int i =0;i<count;i++) 
    { 
     View v = ll.getChildAt(i); 
     if(v instanceof Spinner) 
     { 
      // you got the spinner 
      Spinner s = (Spinner) v; 
      Log.i("Item selected",s.getSelectedItem().toString()); 
     } 
    } 
1

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

Vector spinners = new Vector(): 

private void treverseGroup(ViewGroup vg) 
{ 
    final int count = vg.getChildCount(); 
    for (int i = 0; i < count; ++i) 
    { 
     if (vg.getChildAt(i) instanceof Spinner) 
     { 

      spinners.add(vg.getChildAt(i)); 
     } 
     else if (vg.getChildAt(i) instanceof ViewGroup) 
      recurseGroup((ViewGroup) gp.getChildAt(i)); 
    } 

} 
+0

пропустите корневой вид ........ –

0

Метод ниже имеет возможность извлекать все Спиннеры в всей иерархии представлений, внедренной в rootбез использования рекурсии. Он также соответствует данному тегу.

private ArrayList<Spinner> getSpinners(ViewGroup root, Object matchingTag) { 
    ArrayList<?> list = root.getTouchables(); 

    Iterator<?> it = list.iterator(); 
    while (it.hasNext()) { 
     View view = (View) it.next(); 
     if (!(view instanceof Spinner && view.getTag().equals(matchingTag))) { 
      it.remove(); 
     } 
    } 

    return (ArrayList<Spinner>) list; 
} 
+0

Это смешно, я только что закодировал этот метод в своем проекте, чтобы получить все 'EditText''. –

+0

Возможно, вы захотите проверить возвращаемое значение 'getTag()' для null перед вызовом 'equals()'. –

+0

Почему это невозможно сделать то же самое для textview.Is textt view не осязаемый, то что он называется? –

Смежные вопросы