fragment.xml 内的 DrawerLayout 在单击主页图标时未显示

DrawerLayout inside fragment.xml not showing on home icon click

背景

我正在尝试在我的片段中实现抽屉式导航。我宁愿把它放在那里而不是在我的主 activity 中,因为我正在尝试处理每个片段的工具栏并且耦合 Drawerlayout 会使设置更容易。

问题

当我点击汉堡主页按钮时,没有显示抽屉布局。如何在将抽屉布局保留在我的 fragment.xml 文件中而不是将其移动到 activity 的同时解决此问题?

我尝试过的事情

fragment.xml

<android.support.v4.widget.DrawerLayout
    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/drawer_article_topics"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

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

        <include
            layout="@layout/toolbar" />

        <android.support.v4.widget.SwipeRefreshLayout
            android:id="@+id/articles_swipe_to_refresh"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
          app:layout_behavior="@string/appbar_scrolling_view_behavior"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/articles"
            android:layout_width="0dp"
            android:layout_height="0dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>

        </android.support.v4.widget.SwipeRefreshLayout>

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

    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:menu="@menu/navigation_article_topic" />

</android.support.v4.widget.DrawerLayout>

activity.xml

<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".ui.main.MainActivity">

    <LinearLayout
        android:id="@+id/main_content_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    </LinearLayout>
</LinearLayout>

Fragment.java

@BindView(R.id.drawer_article_topics)
DrawerLayout articleTopicDrawerLayout;

// Other code

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.menu_articles_refresh:
            articleListingViewModel.startRefresh();
            refresh();
            return true;
        case android.R.id.home:
            articleTopicDrawerLayout.openDrawer(GravityCompat.START);
            return true;

    }
    return super.onOptionsItemSelected(item);
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    setHasOptionsMenu(true);
    setSupportActionBar(toolbar);
    setDrawerIcon();
    setupRecyclerView();
    setupSwipeRefreshLayout();
}

private void setDrawerIcon() {
    if (isAdded()) {
        ActionBar actionBar = ((AppCompatActivity)getActivity()).getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setHomeAsUpIndicator(R.drawable.ic_menu);
    }
}

问题似乎在于 DrawerLayout.openDrawer() 和 Android Material 组件库。因为我在我的 AppTheme 中继承了 Theme.MaterialComponents.Light.NoActionBar,导航抽屉没有打开。在他们添加修复程序之前,解决方法是将其添加到您的应用程序主题中:

<item name="navigationViewStyle">@style/Widget.Design.NavigationView</item>

更多信息在这里: https://github.com/material-components/material-components-android/issues/133