При использовании тега <merge>
объединенные представления фактически объединяются прямо в родительский ConstraintLayout
, поэтому ViewGroup
с идентификатором layout_bookings_past
не существует.
Чтобы убедиться, что вы можете проверить свой макет в Layout Inspector
:
Вы можете заметить, что tv_past
и rv_past
являются потомками ConstraintLayout
, то есть корневого макета FragmentBookings
.
Решением будет добавление фактического ViewGroup
вместо <merge>
, например:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_past"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Past bookings"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ll_buttons" />
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_past"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="4dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_past"
tools:itemCount="2"/>
</android.support.constraint.ConstraintLayout>
Есть еще один вариант, если мы предположим, что мы всегда включаем этот макет в ConstraintLayout
. Вы можете добавить android.support.constraint.Group
( больше информации ) в качестве дочернего элемента <merge>
и ссылаться на него в своем коде. Как это:
<android.support.constraint.Group
android:id="@+id/merged_layout"
android:layout_width="0dp"
android:layout_height="0dp"
app:constraint_referenced_ids="tv_past,rv_past"/>
И просто укажите это как обычно:
merged_layout.visibility = View.GONE
Но я думаю, что просто добавить ConstraintLayout
в качестве родителя макета. Избавиться от лишних макетов - это хорошо, но в этом случае не стоит.