android getSupportActionBar()在片段中返回null

时间:2015-03-18 13:23:18

标签: android android-fragments android-actionbar android-appcompat android-actionbar-compat

更新

我没有提及将ToolBarActionBarActivity一起使用的任何内容。这就是我总是得到空指针异常的原因。对于那些面临同样问题的人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()。似乎没有工作。我使用了支持操作栏来保持向后兼容性。 Activity也会相应地投放到ActionBarActivity

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

错误日志

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

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

2 个答案:

答案 0 :(得分:8)

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

我使用ToolBar代替常规ActionBar。使用ToolBar时,必须将其设置为ActionBar。所以做 -

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

之后我可以通过 -

轻松改变标题和外观
((ActionBarActivity)getActivity()).getSupportActionBar().setTitle(s);

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

答案 1 :(得分:1)

只需使用:

mActionBar = getActivity().getSupportActionBar();

或:

mActionBar = ((yourActivityName)getActivity()).getSupportActionBar();


[<强>更新] 删除行mActionBar.setElevation(0);,因为setElevation仅适用于API 21 +