如何在默认的导航抽屉活动中实现工具栏?

时间:2015-02-10 17:27:25

标签: android android-actionbar navigation-drawer android-toolbar

我正在使用Android Studio 1.0.1。我创建了一个新的Navigation Drawer Activity,默认情况下由此IDE提供。它创建了2个Java文件 -

  • HomePage.java延伸android.support.v7.app.AndroidBarActivity
  • NavigationDrawerFragment延伸Fragment

除此之外,它为我提供了3个布局文件 -

  • activity_home_page.xml
  • fragment_home_page.xml
  • fragment_navigation_drawer.xml

现在我想要做的是隐藏Action Bar,然后获取工具栏,因为我想做一些详细的设计。为此,我采取了以下步骤 -

  • styles.xml

    中创建了新样式

        真正     假

  • AndroidManifest.xml中更改了应用程序的主题 android:theme="@style/AppTheme"

  • 制作了toolbar版面,并将其纳入activity_home_page.xml

     

  • HomePage.java

    添加了工具栏对象

    工具栏工具栏=(工具栏)findViewById(R.id.toolbar); setSupportActionBar(栏);

但不幸的是,每当我启动HomePage活动时,我的应用程序都会关闭。有什么建议? Logcat

activity_home_page.xml

HomePage.java

NavigationDrawerFragment.java

custom_toolbar.xml

1 个答案:

答案 0 :(得分:1)

问题:

在您的片段中,您有:

toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
...
toolbar.getContext()

但是,当您致电findViewById时,该活动尚未调用setContentView。这意味着工具栏尚未膨胀,toolbar设置为null。因此toolbar.getContext()会抛出一个NPE。

<强>修正:

而不是toolbar.getContext()只需调用getActivity()即可获取上下文。


如果您的片段确实需要工具栏,则应在活动onCreate之后调用它。一个好地方是onActivityCreated

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
}