У меня есть вид с радиоприемниками, входами и кнопкой, и когда я нажимаю на него, я хочу проверить, что все входы содержат информацию. Как я могу перебирать элементы представления в активности и проверять, соответствует ли каждое текстовое представление вышеупомянутому требованию? Благодарю.Как перебирать элементы вида
52
A
ответ
108
я сделал что-то подобное в некотором коде у меня нет со мной в данный момент, но из памяти это должно быть что-то вроде этого (предполагая, что родительский вид LinearLayout с идентификатором «макета»):
LinearLayout layout = (LinearLayout)findViewById(R.id.layout);
boolean success = formIsValid(layout);
public boolean formIsValid(LinearLayout layout) {
for (int i = 0; i < layout.getChildCount(); i++) {
View v = layout.getChildAt(i);
if (v instanceof EditText) {
//validate your EditText here
} else if (v instanceof RadioButton) {
//validate RadioButton
} //etc. If it fails anywhere, just return false.
}
return true;
}
0
Ваш onClickListener
поставляет объект View v
; используйте View rV = v.getRootView()
, чтобы разместить себя на форме. Затем используйте rV.findViewWithTag(...)
или rV.findViewByID(R.id. ...)
, чтобы найти элементы вашей формы.
14
чтобы применить метод, kcoppock рекурсивно, вы можете изменить его к этому:
private void loopViews(ViewGroup view) {
for (int i = 0; i < view.getChildCount(); i++) {
View v = view.getChildAt(i);
if (v instanceof EditText) {
// Do something
} else if (v instanceof ViewGroup) {
this.loopViews((ViewGroup) v);
}
}
}
Мне нравится использование getClass. Я предполагаю, что в табличном или подобном виде типа контейнера можно использовать рекурсивный вызов, чтобы забрать эти внутренние дети, верно? – Lumis
Хороший вопрос! Я бы так подумал. Я полагаю, вы могли бы заставить функцию formIsValid принять общий параметр View и cast, чтобы вы могли сделать что-то вроде 'if (c == TableLayout.class), если (! FormIsValid (v)) return false;'. Вам нужно будет не возвращать true после вложенного макета, чтобы не выходить из него, прежде чем заканчивать оставшуюся часть оригинальной формы. – kcoppock
Именно так, getChildAt() возвращает только табло. – xain