导航抽屉片段与AppCompat工具栏不兼容

6

我正在使用由模板创建的NavigationDrawer(当启动新项目时)。 我尝试获得Material Design兼容性,因此我正在使用AppCompat v7。 我按照这些说明将Toolbar设置为我的ActionBar(即在我的工具栏上使用setSupportActionBar),但是我在NavigationDrawerFragment中(在onCreateView内部)遇到了NPE。

 mDrawerListView.setAdapter(new ArrayAdapter<String>(
            getActionBar().getThemedContext(),
            android.R.layout.simple_list_item_activated_1,
            android.R.id.text1, ...

我怀疑问题在于片段内的getActionBar()方法:

   private ActionBar getActionBar() {
    return ((ActionBarActivity) getActivity()).getSupportActionBar();
}

但我不知道为什么 - 在 Activity 的 onCreate 方法中,在调用 NavigationDrawerFragment 的 setUp() 方法之前,我调用了 setSupportActionBar(toolbar)...

如果有人知道这是为什么,请帮忙解答!

2个回答

6

看起来问题在于片段的onCreateView在活动的onCreate之前调用,因此没有设置ActionBar。我将有问题的代码移动到片段的onActivityCreated中,现在它可以正常工作。


请问您能否详细说明一下? - bunbun
当我的活动被创建时,片段的onCreateView方法会在活动的onCreate之前被调用。在片段的onCreateView中引发NPE是因为我尝试获取操作栏,但此时操作栏为空,因为活动的onCreate尚未被调用,因此ActionBar尚未被初始化/设置/创建。 这有意义吗? - Djordje

4

只需要将 getActionBar().getThemedContext() 替换为 getActivity()


1
但是 getActivity()不等同于 getActionBar()。getThemedContext()虽然可以提供上下文。 - siva

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接