Нижняя панель приложений скользит вверх / вниз при навигации по фрагментам (Компоненты архитектуры навигации) - PullRequest
0 голосов
/ 30 сентября 2018

Я просматривал нижнюю панель приложений, и есть замечательная возможность скрыть ее при прокрутке app:hideOnScroll="true".Проблема в том, что я не могу понять, как сдвинуть его вверх или вниз, когда все фрагменты перемещаются в .

. Например, обзор настройки: on MainActivity имеет фрагмент хоста навигации и содержит MainFragment и DetailFragment.

У MainFragment есть RecyclerView, который при прокрутке скроет нижнюю панель приложений .Если щелкнуть любой из элементов RecyclerView, он перейдет к DetailFragment.Но проблема в том, что нижняя панель приложений все еще скрыта , и я хочу, чтобы она отображалась.

И снова, скажем, что:

  • StartНаправление имеет RecyclerView;нижняя панель приложения видна.
  • при щелчке по одному из элементов в представлении переработчика, он переходит к другому фрагменту, где он также имеет представление переработчика.Прокрутите окно «Переработчик», и нижняя панель приложения сдвинется вниз.
  • Нажмите кнопку «вверх», чтобы вернуться к месту назначения, и вы увидите, что нижняя панель приложения по-прежнему скрыта.

Нет ли методов для нижней панели приложения, чтобы скользить вверх или вниз с компонентом навигации?В MainActivity я использую следующие коды, чтобы получить кнопку вверх, в onCreate:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    mBottomAppBar = findViewById(R.id.bottom_appbar);
    NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
    NavigationUI.setupActionBarWithNavController(this, navController);

    // ...
}

@Override
public boolean onSupportNavigateUp() {
    return Navigation.findNavController(this, R.id.nav_host_fragment).navigateUp();
}

В activity_main.xml, чтобы скрыть нижнюю панель приложений, которую я включил app:hideOnScroll="true":

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    //...

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

    <com.google.android.material.bottomappbar.BottomAppBar
        android:id="@+id/bottom_appbar"
        android:layout_width="match_parent"
        android:layout_height="?android:attr/actionBarSize"
        app:hideOnScroll="true"
        app:layout_anchor="@+id/nav_host_fragment"
        app:layout_anchorGravity="center|bottom" />

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_anchor="@id/bottom_appbar" />

</androidx.coordinatorlayout.widget.CoordinatorLayout>

Зависимости:

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.0.0'
    implementation 'android.arch.navigation:navigation-fragment:1.0.0-alpha06'
    implementation 'android.arch.navigation:navigation-ui:1.0.0-alpha06'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'com.google.android.material:material:1.0.0'
    implementation 'androidx.recyclerview:recyclerview:1.0.0'
    // ...

1 Ответ

0 голосов
/ 01 октября 2018

Проблема не имеет ничего общего с компонентом навигации, так как он ведет себя правильно.Просто позвоните по номеру bottom_appbar.show() и наберите свой код навигации.

...