更新
我没有提及将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()
。似乎没有工作。我使用了支持操作栏来保持向后兼容性。 Activity
也会相应地投放到ActionBarActivity
。
完整的代码非常冗长,所以我跳过了它。如果需要,我可以发布完整的代码并更新问题以及更多细节。
错误日志
Caused by: java.lang.NullPointerException
at com.example.testapp.fragments.NavigationDrawerFragment.onActivityCreated(NavigationDrawerFragment.java:215)
第215行是:mActionBar.setElevation(0);
答案 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 +