Включенный вид возвращает ноль в Framelayout - PullRequest
0 голосов
/ 05 октября 2019

Я успешно использовал один и тот же включенный макет несколько раз в макете на основе Constraint.

View outer = rootview.findViewByID(R.id.outer);
TextView inner = outer.findViewByID(R.id.inner): //NPE on "outer" here in FrameLayout
View outer_two = rootview.findViewByID(R.id.outer_two);
TextView inner_two = outer_two.findViewByID(R.id.inner):

Прекрасно работает в ConstraintLayout в качестве базового макета для xml !!

<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

    <include
    android:layout_width="match_parent"
    android:id="@+id/outer"
    android:layout_height="0dp"
    layout="@layout/button_panel"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintTop_toTopof="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

Однаконе тогда, когда это FrameLayout в качестве базы (т. е. любой макет, который расширяет FrameLayout)

<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

    <include
    android:layout_width="match_parent"
    android:id="@+id/outer"
    android:layout_height="match_parent"
    layout="@layout/button_panel"/>

</FrameLayout>

И внутренний макет button_panel.xml

<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

    <TextView
    android:layout_width="match_parent"
    android:id="@+id/inner"
    android:layout_height="0dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintTop_toTopof="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

Однако, если я попробую то же самое в FrameLayout на основемакет Я получаю NPE.

Может кто-нибудь объяснить мне, почему это не работает в FrameLayout?

...