Панель инструментов исчезает при переходе на новый фрагмент - PullRequest
1 голос
/ 21 марта 2020

Есть два фрагмента - RuleListFragmetn и RuleFragment. Фрагмент RuleListFragment использует элемент RecyclerView. Панель инструментов имеет флаги приложения: layout_scrollFlags = "scroll | enterAlways | snap", а AppBarLayout имеет параметр приложения: liftOnScroll = "true". Если список в RuleListFragment не был прокручен и переход к фрагменту RuleFragment завершен, то панель инструментов находится на месте. Если список в RuleListFragment был прокручен (панель инструментов спрятана вверху), то когда вы go откроете фрагмент панели инструментов RuleFragment, он исчезнет. Картинка ниже объясняет. Может быть, во фрагменте нужно сбросить положение панели инструментов? Но как это сделать?

enter image description here

Ответы [ 2 ]

1 голос
/ 21 марта 2020

Ваше предположение верно. Поскольку appBarLayout находится в действии, панель инструментов остается скрытой при изменении фрагментов.

Решение состоит в том, чтобы вызвать appBarLayout.setExpanded(true) в новом фрагменте. Вы можете сделать это внутри onStart, например.

Более подробная информация здесь: AppBarLayout.setExpanded (логическое расширение) .

0 голосов
/ 21 марта 2020

activity_main. xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout
    ...
    android:id="@+id/drawerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:openDrawer="start"
    android:fitsSystemWindows="true">

    <androidx.coordinatorlayout.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <com.google.android.material.appbar.AppBarLayout
            android:id="@+id/appBarLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:liftOnScroll="true">

            <androidx.appcompat.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_scrollFlags="scroll|enterAlways|snap"/>

        </com.google.android.material.appbar.AppBarLayout>

        <fragment
            android:id="@+id/hostFragment"
            android:name="androidx.navigation.fragment.NavHostFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:defaultNavHost="true"
            app:navGraph="@navigation/navigation_graph"
            app:layout_behavior="@string/appbar_scrolling_view_behavior" />

    </androidx.coordinatorlayout.widget.CoordinatorLayout>

    <com.google.android.material.navigation.NavigationView
        android:id="@+id/navView"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:headerLayout="@layout/navigation_header"
        app:menu="@menu/menu_navigation"
        android:fitsSystemWindows="true"/>

</androidx.drawerlayout.widget.DrawerLayout>

frag_recycler. xml

<androidx.recyclerview.widget.RecyclerView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

frag_rule. xml

<?xml version="1.0" encoding="utf-8"?>
    <TextView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="fragment_rule" />

RuleListFragment. java

public class RuleListFragment extends Fragment {
    ...
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_recycler, container, false);

        ...

        return view;
    }

    private class RuleHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        ...

        @Override
        public void onClick(View view) {
            Bundle args = new Bundle();
            args.putSerializable("ruleId", rule.getId());
            Navigation.findNavController(view).navigate(R.id.ruleFragment, args);
        }
    }

    private class RuleAdapter extends RecyclerView.Adapter<RuleHolder> {
        ...
    }
}
...