Ответ 1
Вы всегда можете сделать что-то вроде этого:
LinearLayout layout = setupLayout();
int count = layout.getChildCount();
View v = null;
for(int i=0; i<count; i++) {
v = layout.getChildAt(i);
//do something with your child element
}
Есть ли способ получить дочерний элемент LinearLayout? Мой код возвращает представление (linearlayout), но мне нужно получить доступ к определенным элементам внутри макета.
Любые предложения?
(Да, я знаю, что могу использовать findViewById, но я создаю макеты/дочерние элементы в java, а не XML.)
Вы всегда можете сделать что-то вроде этого:
LinearLayout layout = setupLayout();
int count = layout.getChildCount();
View v = null;
for(int i=0; i<count; i++) {
v = layout.getChildAt(i);
//do something with your child element
}
Я думаю, что это могло бы помочь: findViewWithTag()
Установите TAG для каждого Просмотра, который вы добавляете в макет, а затем получите этот вид по TAG, как вы бы это сделали, используя идентификатор
Я бы не стал статически захватывать элемент из детей вида. Теперь он может работать, но делает код сложным для поддержания и восприимчивости к будущим выпускам. Как указано выше, правильный способ сделать это - установить тег и получить представление по тегу.
Вы можете сделать это.
ViewGroup layoutCont= (ViewGroup) findViewById(R.id.linearLayout);
getAllChildElements(layoutCont);
public static final void getAllChildElements(ViewGroup layoutCont) {
if (layoutCont == null) return;
final int mCount = layoutCont.getChildCount();
// Loop through all of the children.
for (int i = 0; i < mCount; ++i) {
final View mChild = layoutCont.getChildAt(i);
if (mChild instanceof ViewGroup) {
// Recursively attempt another ViewGroup.
setAppFont((ViewGroup) mChild, mFont);
} else {
// Set the font if it is a TextView.
}
}
}
LinearLayout layout = (LinearLayout)findViewById([whatever]);
for(int i=0;i<layout.getChildCount();i++)
{
Button b = (Button)layout.getChildAt(i)
}
Если это все кнопки, в противном случае они отображаются для просмотра и проверки класса
View v = (View)layout.getChildAt(i);
if (v instanceof Button) {
Button b = (Button) v;
}