2010-11-16 2 views
5

Я начал свое собственное приложение для Android несколько дней назад, так как мне понадобилось мобильное приложение для хранения множества данных, которые я собираю в больнице.Петля через все «виджеты»/элементы в действии

Я довольно новичок в среде Java и Android, хотя кажется, что это легко понять и очень похоже на C++.

Во всяком случае, мое приложение имеет кучу «EditText» и радио-кнопки и мой вопрос:

Как я могу перебирать все эти виджеты (EditTexts и кнопки радио)?

В .NET вы можете сделать цикл «для каждого элемента в контейнере», но я не могу найти способ сделать это в среде Java/android.

Примечание: Я не знаю, сколько «виджеты» существуют в деятельности, так как некоторые из них созданы dinamicaly, другие зашиты и некоторые другие показывают, если некоторые пользовательские настройки установлены

Любой помощи или подсказка будет оценили.

ответ

4
for (int i = 0; i < rootView.getChildCount(); i++) 
    rootView.getChildAt(i) 

Обратите внимание, что это вернет View-с, вы должны проверить во время выполнения точно, какой тип зрения вы сейчас смотрите на

+0

Этот наконечник, кажется, указывает на правильное направление. – Tivie

+2

Интересно. Но отправной точкой была деятельность. Таким образом, у вашей демонстрации отсутствует шаг от активности до rootView ;-) - я, наверное, могу понять это сам, но было бы хорошо. – Martin

1

Он работает.

Что касается View типа (то есть Spinner, RadioButton, EditText и т.д.), мы можем маркировать каждый тип, который мы хотим разобрать в файле макета XML, а затем добавить условное, то есть:

if (Widget_Tag != null){ 

     View Current_Widget = (View) rootView.getChildAt(i);   

     String Widget_Tag = (String) Current_Widget.getTag(); 

     if (Widget_Tag.equals("MyEdiText")) { 

     //do something 

     } 
    } 

КРП (Widget_Tag! = Null) {заключается в предотвращении NullPointReferences. Вы также можете сделать это с помощью Try/Catch.

+0

Как я уже сказал приложениям: откуда происходит 'rootView'. – Martin

1

Вы можете попробовать этот код:

LayoutInflater inflater = getLayoutInflater(); 
LinearLayout l = (LinearLayout) inflater.inflate(R.layout.main, null); 

ViewGroup Current_Widget = (ViewGroup)l.getRootView(); 

for (int i = 0; i < Current_Widget.getChildCount(); i++) 
    Current_Widget.getChildAt(i); 
Смежные вопросы