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

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

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

4 Solutions collect form web for “Способ получения всех EditTexts в представлении”

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

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-приложение выходит из памяти - пробовал все и все еще в растерянности
  • Установка системного времени телефона ROOTED
  • Установленное соединение было прервано программным обеспечением вашей главной машины
  • Как раз для всех, как правильно сохранить состояние экземпляра fragmentов в стеке?
  • Размер подсказки для Android EditText
  • Добавление эффекта пульсации в элемент RecyclerView
  • Как передать переменную от Activity to Fragment и передать ее обратно?
  • Как заменить устаревший файл android.support.v4.app.ActionBarDrawerToggle
  • Активность, AppCompatActivity, FragmentActivity и ActionBarActivity: когда использовать что?
  • Последнее обновление по включению и отключению мобильных данных программно
  • Получить ширину и высоту экрана
  • Давайте будем гением компьютера.