Android: Navigation/hamburger 添加 RecyclerView 后菜单打不开

Android: Navigation/hamburger menu won't open after adding RecyclerView

我的最终目标是创建一个简单的 material 设计待办事项列表。我只是处于早期阶段,但我遇到了一个我似乎无法解决的问题。当我将回收站视图添加到主视图 activity 时,当我从左侧滑动或点击汉堡菜单时,导航菜单不会显示。当我将其注释掉时,它工作正常。有谁知道问题可能是什么?我很确定这很简单,但我已经在网上和 Whosebug 上进行了研究,但似乎无法得出答案。你们过去都帮了大忙,我希望能再次发生奇迹!

我正在关注这里的教程系列,从视频 #6 开始进行了一些小的调整,我希望在主 activity 中使用回收器视图,而不是导航抽屉: https://www.youtube.com/playlist?list=PLonJJ3BVjZW6CtAMbJz1XD8ELUs1KXaTD

谢谢!

这里是有问题的布局:

<RelativeLayout
    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:layout_height="match_parent"
    android:layout_width="match_parent" >

    <!-- Navigation Drawer -->
    <LinearLayout
        android:id="@+id/drawer_layout_overall"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <!-- Include app_bar so the bar shows after drawer is opened -->
        <include
            android:id="@+id/app_bar"
            layout="@layout/app_bar" />

        <android.support.v4.widget.DrawerLayout
            android:id="@+id/drawer_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>

            <fragment
                android:id="@+id/fragment_navigation_drawer"
                android:name="cca.habitrpgnativeclient.com.NavigationDrawerFragment"
                android:layout_width="@dimen/nav_drawer_width"
                android:layout_height="match_parent"
                android:layout_gravity="start"
                app:layout="@layout/fragment_navigation_drawer"
                tools:layout="@layout/fragment_navigation_drawer" />

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



    </LinearLayout>

    <!-- Tasks -->
    <!--<android.support.v7.widget.RecyclerView-->
        <!--android:id="@+id/tasks_layout"-->
        <!--android:layout_width="match_parent"-->
        <!--android:layout_height="wrap_content"-->
        <!--android:paddingTop="@dimen/app_bar_top_padding"-->
        <!--android:paddingLeft="@dimen/tasks_left_padding" />-->

</RelativeLayout>

此外,这里是有问题的方法:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Setup toolbar
    toolbar= (Toolbar) findViewById(R.id.app_bar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    // Setup navigation menu
    NavigationDrawerFragment drawerFragment = (NavigationDrawerFragment)
                getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);
    drawerFragment.setUp(((DrawerLayout) findViewById(R.id.drawer_layout)), toolbar);

    // Setup tasks
//        recyclerView  = (RecyclerView) findViewById(R.id.tasks_layout);
//        taskAdapter = new TaskAdapter(this, getTasks());
//        recyclerView.setAdapter(taskAdapter);
//        recyclerView.setLayoutManager(new LinearLayoutManager(this));

}

(感谢编辑,我也添加了另一种方法)

现在,您的 RecyclerView 正在 Z 轴上覆盖 LinearLayout(包含您的 DrawerLayout)。因此,您的 DrawerLayout 不会收到任何触摸事件,这就是为什么您的边框滑动不起作用的原因。显然 app_bar <include> 是一个 Toolbar,我假设你的汉堡包在其中,而且它也被 RecyclerView 覆盖,这就是为什么它不起作用的原因。

activity 的主要 UI 位于 FrameLayout 所在的位置。因此,要么将 FrameLayout 替换为 RecyclerView,要么将 RecyclerView 放入 FrameLayout,或者将 RecyclerView 放入您加载到的片段中FrameLayout.