如何打开没有操作栏的导航抽屉,只需打开一个button

我有一个没有任何操作栏的导航栏(我不想要一个操作栏)。 我正在努力使我有一个可以打开导航抽屉的button

我知道有一个叫做openDrawer的DrawerLayout方法http://developer.android.com/reference/android/support/v4/widget/DrawerLayout.html#openDrawer(android.view.View)

我不知道如何使用它,但我已经尝试做一个button,单击时,运行此方法:

DrawerLayout mDrawerLayout = (DrawerLayout) getView().findViewById(R.id.drawer_layout); mDrawerLayout.openDrawer(mDrawerLayout); 

当我点击它,它给了我一个Java NullPointerException。 有人有什么想法吗?

编辑:这段代码是在一个片段,我试图引用片段外的抽屉布局。 我用debugging器,它显示mDrawlerLayout是NULL。

有什么build议?

谢谢!

Solutions Collecting From Web of "如何打开没有操作栏的导航抽屉,只需打开一个button"

这是给你一个空指针,因为你正试图在片段视图中查找抽屉布局,当它实际上在活动视图中。

快速入门做你想做的就是find像这样的视图:

 getActivity().findViewById(R.id.drawer_layout) 

这应该工作。 更好的方法是在打开抽屉的活动上有一个方法

 public void openDrawer(){ mDrawerLayout.openDrawer(mDrawerLayout); } 

在活动onCreate运行你的findViewById:

 mDrawerLayout = (DrawerLayout) getView().findViewById(R.id.drawer_layout); 

mDrawerLayout应该是您的活动的成员variables。

然后在你的片段中,你可以调用:

 //cast activity to MyActivity so compiler doesn't complain ((MyActivity)getActivity()).openDrawer(); 

更好的方法是在片段中创build一个侦听器,并将该活动设置为片段的侦听器。 然后你可以调用一个类似上面的方法。 我会让你做一些研究如何做到这一点。

drawerLayout.openDrawer(Gravity.START);

感谢@athor&@Ashish Tana。

花了我很多时间来弄清楚我得到的错误( NullPointerException )。

我的工作是这样的。 而不是getView() ,我使用getActivity()并通过mDrawerLayout.openDrawer(Gravity.LEFT);打开抽屉mDrawerLayout.openDrawer(Gravity.LEFT);

 mDrawerLayout = (DrawerLayout) getActivity().findViewById(R.id.drawer_layout); final ImageButton btnOpenDrawer = (ImageButton) getView().findViewById(R.id.drawer_menu); btnOpenDrawer.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mDrawerLayout.openDrawer(Gravity.LEFT); } }); 

我在这里写了一个关于这个的答案: https : //stackoverflow.com/a/18199771/880349

  //For me a better way in avoiding a `null pointer` in getting the DrawerLayout final DrawerLayout drawer = (DrawerLayout) getActivity().findViewById(R.id.drawer_layout); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub //Opens the Drawer drawer.openDrawer(Your View, Usually a ListView); } return false; }); 

你直接把当前的抽屉拿到视图中,这样你就不会得到NullPointerException

它工作在button点击

 mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { drawer.openDrawer(GravityCompat.START); } });