Если я создам два класса, родительский класс, который расширяет FrameLayout, и дочерний класс, который расширяет View, а затем использую XML для их инициализации. Можно ли получить дочерние элементы из конструктора родительского класса? Если я использую getChildAt(), я всегда получаю null, так как активность еще не создана.
<com.example.Parent
android:layout_width = "match_parent"
android:layout_height = "200dp"
android:layout_centerInParent = "true">
<com.example.Child
android:layout_width = "match_parent"
android:layout_height = "match_parent" />
<com.example.Child
android:layout_width = "match_parent"
android:layout_height = "match_parent" />
</com.example.Parent>
Родительские и дочерние классы
public class Parent extends FrameLayout {
public Parent(@NonNull Context context) {
super(context);
this.getChildAt(0); // return null
}
...
}
public class Child extends View {
...
}
вы можете взглянуть на функцию onFinishInflate.
onFinishInflate() сделает работу
Поскольку вы вызываете getChildAt при построении вашего FrameLayout, вы получаете нулевые значения (ваши дети все еще не полностью привязаны к представлению). Одним из решений было бы перезаписать onLayout() или onMeasure(), чтобы получить ваши дочерние файлы.
Перед надуванием нельзя получить дочерний вид из родительского.
Но вы можете сделать это динамически, но это также работает так же, как и вы должны добавлять представления вручную в родительское представление.
И тогда вы можете получить дочерние представления из родительского представления.
Вы не можете получить дочерний элемент в конструкторе
Viewеще не нарисован. Каков ваш вариант использования дочерних просмотров? Отредактируйте свой вопрос с требованием, чтобы кто-то мог помочь.