如何打开没有操作栏的导航抽屉,只需一个按钮即可打开

Cyn*_*azo 36 android button navigation-drawer drawerlayout

我有一个没有任何操作栏的导航栏(我不想要一个操作栏).我正在尝试这样做,以便我有一个可以打开导航抽屉的按钮.

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

我不知道如何使用它,但我在点击时尝试制作一个按钮,运行此方法:

DrawerLayout mDrawerLayout = (DrawerLayout) getView().findViewById(R.id.drawer_layout);
mDrawerLayout.openDrawer(mDrawerLayout);
Run Code Online (Sandbox Code Playgroud)

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

编辑:此代码在片段内,我试图在片段外引用这些抽屉布局.我使用了调试器,它显示mDrawlerLayout为NULL.

有什么建议?

谢谢!

ath*_*hor 53

它给你一个空指针,因为你试图在片段视图中找到抽屉布局,当它实际上在活动视图中时.

快速破解你想要的是找到像这样的视图:

getActivity().findViewById(R.id.drawer_layout)
Run Code Online (Sandbox Code Playgroud)

这应该工作.更好的方法是在活动上打开抽屉的方法

public void openDrawer(){
    mDrawerLayout.openDrawer(mDrawerLayout);
}
Run Code Online (Sandbox Code Playgroud)

在onCreate活动中运行你的findViewById:

mDrawerLayout = (DrawerLayout) getView().findViewById(R.id.drawer_layout);
Run Code Online (Sandbox Code Playgroud)

mDrawerLayout应该是您活动的成员变量.

然后在你的片段中你可以打电话:

//cast activity to MyActivity so compiler doesn't complain
((MyActivity)getActivity()).openDrawer();
Run Code Online (Sandbox Code Playgroud)

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

  • 我不得不在`openDrawer`方法中使用`mDrawerLayout.openDrawer(Gravity.LEFT);`来使其工作.(我使用导航抽屉,没有碎片和操作栏)否则,它只是挂起应用程序. (14认同)

Ali*_*iya 36

__CODE__