Перебрать все «виджеты» / элементы в Activity - PullRequest
6 голосов
/ 16 ноября 2010

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

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

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

Как мне перебрать все эти виджеты (EditTexts и переключатели)?

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

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

Буду признателен за любую помощь или подсказку.

Ответы [ 3 ]

5 голосов
/ 16 ноября 2010
for (int i = 0; i < rootView.getChildCount(); i++)
  rootView.getChildAt(i)

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

1 голос
/ 22 мая 2012

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

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);
1 голос
/ 18 ноября 2010

Работает.

Что касается типа представления (т.е. 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

      }
   }

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...