Способ получения всех EditTexts в представлении

может ли кто-нибудь помочь мне с кодированием метода, чтобы получить все EditTexts в представлении? Я хотел бы реализовать решение htafoya, размещенное здесь: Как скрыть мягкую клавиатуру на андроиде, щелкнув вне EditText?

К сожалению, метод getFields() отсутствует, и htafoya не ответил на наш запрос, чтобы поделиться своим getFields() .

РЕДАКТИРОВАТЬ

MByD указал мне на ошибку, тем самым сделав мой ответ почти идентичным тому, что был в blackbelt. Я редактировал мой правильный подход.


Вы можете сделать цикл for-each, а затем проверить, имеет ли каждый вид тип EditText:

 ArrayList myEditTextList = new ArrayList(); for( int i = 0; i < myLayout.getChildCount(); i++ ) if( myLayout.getChildAt( i ) instanceof EditText ) myEditTextList.add( (EditText) myLayout.getChildAt( i ) ); 

Вы также можете, вместо списка EditTexts, иметь список идентификаторов, а затем просто добавить идентификатор дочернего myIdList.add( child.getId() ); в список: myIdList.add( child.getId() );


Чтобы получить доступ к макету, вам нужно получить ссылку на него. Это означает, что вам необходимо предоставить идентификатор вашего макета в XML:

  //Here is where your EditTexts would be declared  

Затем, когда вы раздуваете макет в своей деятельности, вы просто сохраняете ссылку на него:

 LinearLayout myLinearLayout; public void onCreate( Bundle savedInstanceState ) { super( savedInstanceState ); setContentView( R.layout.myLayoutWithEditTexts ); ... myLinearLayout = (LinearLayout) findViewById( R.id.myLinearLayout ); } 

Затем у вас есть ссылка на владельца вашего EditTexts в рамках действия.

Вот метод, который я написал, чтобы рекурсивно проверить все дети EditText группы ViewGroup, удобные для длинной регистрационной формы, которую я должен был сделать, и, вероятно, более удобной для обслуживания.

 private EditText traverseEditTexts(ViewGroup v) { EditText invalid = null; for (int i = 0; i < v.getChildCount(); i++) { Object child = v.getChildAt(i); if (child instanceof EditText) { EditText e = (EditText)child; if(e.getText().length() == 0) // Whatever logic here to determine if valid. { return e; // Stops at first invalid one. But you could add this to a list. } } else if(child instanceof ViewGroup) { invalid = traverseEditTexts((ViewGroup)child); // Recursive call. if(invalid != null) { break; } } } return invalid; } private boolean validateFields() { EditText emptyText = traverseEditTexts(mainLayout); if(emptyText != null) { Toast.makeText(this, "This field cannot be empty.", Toast.LENGTH_SHORT).show(); emptyText.requestFocus(); // Scrolls view to this field. } return emptyText == null; } 

Вы можете сделать это, вызвав View#getFocusables , который вернет arraylist всех настраиваемых представлений в представлении.

Затем вы можете проверить, являются ли они EditText s, с ( instanceof ) или действовать на всех из них.

Эти методы проходят рекурсивно через все группы представлений и собирают их текстовые элементы. Я использую это, чтобы назначить новый цвет всем TextViews (даже тем, которые встроены в предопределенные виджеты, такие как Switch и т. Д., Которые используют TextViews)

 private HashSet getTextViews(ViewGroup root){ HashSet views=new HashSet<>(); for(int i=0;i 
  • Имитировать низкий уровень заряда аккумулятора и низкую память в Android
  • Фрагменты и анимация Android
  • Android - Кнопки громкости, используемые в моем приложении
  • Не удалось запустить устройство Genymotion
  • Как сделать форму шестиугольника ImageView
  • Невозможно загрузить скрипт из активов index.android.bundle в windows
  • Сколько действий против fragmentов?
  • Android, как определить элемент в списке с помощью флажка
  • Как получить все отмеченные элементы из ListView?
  • Пользовательский ListView для Android не может нажимать на элементы
  • Как получить текущий контекст активности переднего плана в android?
  • Interesting Posts

    Время слияния Excel

    Как обновить iPhone SDK без повторной загрузки Xcode?

    Как сопоставить кириллические символы с регулярным выражением

    Установить операции (объединение, пересечение) в массиве Swift?

    rsync: как я могу настроить его для создания целевого каталога на сервере?

    порядок оценки параметров функции

    Поддерживает ли C ++ «наконец» блоки? (И что это за «RAII», о котором я все время слышу?)

    В чем смысл правильного CSS / HTML?

    Клавиатура MacBook Pro – как заменить / переустановить клавиши?

    Как я могу получить список стека вызовов в Perl?

    Microsoft word `product (left)` для всех числовых ячеек

    «Ваш бинарный файл не оптимизирован для iPhone 5» после загрузки приложения с помощью xcode 6.0.1

    Смешивание размера партии гибернации

    Как я могу построить свой тестовый пакет асинхронно?

    Переименуйте несколько файлов, заменив определенный шаблон в именах файлов, используя сценарий оболочки

    Давайте будем гением компьютера.