Search code examples
androidandroid-collapsingtoolbarlayoutpreferencefragment

PreferenceFragment no scroll in CollapsingToolbarLayout


I have a problem with PreferenceFragment and CollapsingToolbarLayout. I have a base layout:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/mainLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activities.base.BaseActivity">

<android.support.design.widget.AppBarLayout
    android:id="@+id/appbarLayout"
    android:layout_width="match_parent"
    android:layout_height="@dimen/nav_header_height"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/ctlLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_scrollFlags="scroll|exitUntilCollapsed">

        <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            android:minHeight="?attr/actionBarSize"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            app:layout_collapseMode="pin"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"></android.support.v7.widget.Toolbar>

    </android.support.design.widget.CollapsingToolbarLayout>

</android.support.design.widget.AppBarLayout>

<FrameLayout
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    android:nestedScrollingEnabled="true"/>

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fabFav"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginRight="85dp"
    android:src="@android:drawable/ic_menu_save"
    app:layout_anchor="@id/appbarLayout"
    app:layout_anchorGravity="bottom|right|end"
    android:visibility="gone" />

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fabShare"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/fab_margin"
    android:src="@android:drawable/ic_menu_share"
    app:borderWidth="0dp"
    app:layout_anchor="@id/appbarLayout"
    app:layout_anchorGravity="bottom|right|end"
    android:visibility="gone" />

<fragment
    android:id="@+id/search_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:name="com.eventum.raedictionary.fragments.SearchFragment"
    tools:layout="@layout/fragment_search"/>

The problem is when I inflate the Framelayout with a PreferenceFragment the scroll doesn't work but with a normal Fragment works properly.

        BaseSettingFragment settingsFragment = new BaseSettingFragment();

        fragmentTransaction = getFragmentManager().beginTransaction();

        fragmentTransaction.setCustomAnimations(R.transition.fade_in, R.transition.fade_out);

        fragmentTransaction.replace(R.id.fragment_container, settingsFragment);

        fragmentTransaction.commit();

I haven't found any solutions for this problem, can anyone help me?

Thank you in advance.

PD: Sorry for my English.


Solution

  • PreferenceFragment is based on ListView, which does not support the nested scrolling APIs required for CollapsingToolbarLayout. You can instead use the Preference Support Library and PreferenceFragmentCompat, which is based on RecyclerView and does support the nested scrolling APIs required.