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
.
我的最终目标是创建一个简单的 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
.