CoordinatorLayout в сочетании с CollapsingToolbarLayout, RecyclerView и проблемой фрагментов

В моем приложении у меня одна ведьма MainActivity содержит контейнер для фрагментов, один фрагмент - CoordinatorFragment с CordinatoirLayout+RecycleView и CollapsingToolbarLayout и второй - SimpleFragment с одним TextView. При создании MainActivity добавляю первый фрагмент

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    Fragment fragment = new CoordinatorFragment();
    transaction.replace(R.id.fragmentContainer,fragment);
    transaction.commit();
}

Расположение координатора Фрагнета:

<android.support.design.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/main_appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#FFF"
        android:fitsSystemWindows="true">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/main.collapsing"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#0000"
            android:fitsSystemWindows="true"
            app:layout_scrollFlags="snap|scroll|enterAlways">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="#0000"
                android:fitsSystemWindows="true"
                android:orientation="vertical"
                app:layout_collapseMode="none">

                <ImageView
                    android:id="@+id/first"
                    android:layout_width="wrap_content"
                    android:layout_height="23dp"
                    android:layout_marginLeft="20dp"
                    android:layout_marginRight="20dp"
                    android:layout_marginTop="30dp"
                    android:adjustViewBounds="true" />

                <TextView
                    android:id="@+id/second"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="20dp"
                    android:layout_marginRight="20dp"
                    android:layout_marginTop="40dp" />

                <TextView
                    android:id="@+id/third"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="20dp"
                    android:layout_marginRight="20dp" />

                <View
                    android:layout_width="match_parent"
                    android:layout_height="130dp"
                    android:layout_marginTop="20dp"
                    android:background="#fff" />
            </LinearLayout>
        </android.support.design.widget.CollapsingToolbarLayout>

        <View
            android:id="@+id/fourth"
            android:layout_width="match_parent"
            android:layout_height="10dp"
            android:background="#fff"
            app:layout_collapseMode="pin" />

        <LinearLayout
            android:id="@+id/fiveth_field"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:background="@color/colorPrimary"
            app:layout_collapseMode="pin">

            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center_horizontal"
                android:padding="20dp"
                android:text="RIGHT" />

            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center_horizontal"
                android:padding="20dp"
                android:text="LEFT" />
        </LinearLayout>
    </android.support.design.widget.AppBarLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>

При использовании адаптера RecycleeView я заменяю первый фрагмент вторым

 @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                getFragmentManager().beginTransaction().replace(R.id.fragmentContainer, new SimpleFragment()).addToBackStack("TAG").commit();
            }
        });
    }

После первой инициализации все ок. Я могу прокрутить содержимое RecyclerView и последний элемент полностью виден.

Прокрутить до последнего (первый инициал)

Но после перехода ко второму фрагменту и возврата к первому фрагменту, нажав кнопку "Назад", последний элемент RecyclerView обрезается по размеру не свернутой части панели инструментов. И нет возможности полностью просмотреть этот предмет. Все остальные функции в порядке.

Прокрутите до последнего (после замены фрагментов и нажмите кнопку назад)

Любые идеи, как решить эту проблему, оставляя фрагмент на основе реализации? Заранее спасибо!!

2 ответа

Измените высоту RecyclerView на match_parent,

После нескольких попыток я реорганизовал структуру фрагмента координатора. Поскольку последний элемент вырезан точно по высоте LinearLayout с помощью текстовых представлений "ВЛЕВО" и "ВПРАВО", я удалил их из AppBarLayout и добавил в RelativeLayout выше RecyclerView. Это исправило мою проблему.

Макет Coordinator Fragment после рефакторинга:

   <android.support.design.widget.CoordinatorLayout 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"
    android:orientation="vertical">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/main_appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#FFF">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/main.collapsing"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#0000"
            app:layout_scrollFlags="snap|scroll|enterAlways">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="200dp"
                android:background="#0000"
                android:orientation="vertical"
                app:layout_collapseMode="none"></LinearLayout>
        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <LinearLayout
            android:id="@+id/fiveth_field"
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:background="@color/colorPrimary"
            android:orientation="horizontal">

            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center_horizontal"
                android:padding="20dp"
                android:text="RIGHT" />

            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center_horizontal"
                android:padding="20dp"
                android:text="LEFT" />
        </LinearLayout>

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/fiveth_field" />
    </RelativeLayout>
</android.support.design.widget.CoordinatorLayout>

Я думаю, что это проблема в реализации CoordinatorLayout+AppBarLayout. Может быть, мой ответчик будет кому-то полезен.

Другие вопросы по тегам