android getSupportActionBar()在片段中返回null

UPDATE

我没有提到将ToolBar与ActionBarActivity一起使用的任何内容.这就是我总是得到空指针异常的原因.对于那些面临同样问题please refere this answer的人

我有这个片段代码来更改片段时更改支持操作栏的外观.

@Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        setHasOptionsMenu(true);
        mActionBar = ((ActionBarActivity)getActivity()).getSupportActionBar();
        SpannableString s = new SpannableString("Dashboard");
        s.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.app_blue_text)), 0, s.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
        s.setSpan(new TypefaceSpan(getActivity(), "Optima-Regular.ttf"), 0, s.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

        if( null!= mActionBar){
            mActionBar.setElevation(0);
            mActionBar.setTitle(s);
        }
    }

我已经提到了有关如何解决此错误的先前/类似问题.这些解决方案建议在onActivityCreated()方法中更改操作栏外观.我也试过onAttach().似乎没有工作.我使用了支持操作栏来保持向后兼容性.活动也相应地转换为ActionBarActivity.

完整的代码非常冗长,所以我跳过了它.如果需要,我可以发布完整的代码并更新问题以及更多细节.

错误日志

Caused by: java.lang.NullPointerException
            at com.example.testapp.fragments.NavigationDrawerFragment.onActivityCreated(NavigationDrawerFragment.java:215) 

第215行是:mActionBar.setElevation(0);

解决方法:

我错过了在这个问题中提及的更多信息.这就是其他优秀的SO用户无法正确回答的原因.所以我在这里自己回答.

我用ToolBar代替了常规的ActionBar.使用ToolBar时,必须将其设置为ActionBar.所以做 –

toolbar = (Toolbar) getActivity().findViewById(toolbarId);
((ActionBarActivity)getActivity()).setSupportActionBar(toolbar);

之后我可以轻松改变标题和外观 –

((ActionBarActivity)getActivity()).getSupportActionBar().setTitle(s);

只需记住在实际使用片段中的操作栏之前将工具栏设置为操作栏.

上一篇:android – appcompat 21徽标作为后退按钮


下一篇:android – 如何使用AppCompat覆盖CheckBox颜色