android getSupportActionBar() returns 片段中为空
android getSupportActionBar() returns null in fragment
更新
我没有提到任何关于使用 ToolBar with ActionBarActivity
. And that is the reason I always get null pointer exception. For those who face same problem
我有这个片段代码可以在片段更改时更改支持操作栏的外观。
@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);
}
}
我已经提到 previous/similar 有关如何解决此错误的问题。这些解决方案建议更改 onActivityCreated()
方法中的操作栏外观。我也试过onAttach()
。 None 似乎有效。我使用支持操作栏来保持向后兼容性。 Activity
也相应地转换为 ActionBarActivity
。
完整代码相当冗长,所以我跳过了 post。如果需要,我可以 post 完成代码并使用更多详细信息更新问题。
错误日志
Caused by: java.lang.NullPointerException
at com.example.testapp.fragments.NavigationDrawerFragment.onActivityCreated(NavigationDrawerFragment.java:215)
第 215 行是:mActionBar.setElevation(0);
只需使用:
mActionBar = getActivity().getSupportActionBar();
或:
mActionBar = ((yourActivityName)getActivity()).getSupportActionBar();
[更新]
删除行 mActionBar.setElevation(0);
因为 setElevation
仅适用于 API 21+
我错过了在这个问题中提到的更多信息。这就是其他好的 SO 用户无法正确回答的原因。所以在这里我自己回答。
我用 ToolBar 代替了常规的 ActionBar
。当您使用 ToolBar
时,您必须将其设置为 ActionBar。所以通过做 -
toolbar = (Toolbar) getActivity().findViewById(toolbarId);
((ActionBarActivity)getActivity()).setSupportActionBar(toolbar);
然后我可以通过 -
轻松更改标题和外观
((ActionBarActivity)getActivity()).getSupportActionBar().setTitle(s);
在fragment中实际使用actionbar之前记得将toolbar设置为actionbar。
更新
我没有提到任何关于使用 ToolBar with ActionBarActivity
. And that is the reason I always get null pointer exception. For those who face same problem
我有这个片段代码可以在片段更改时更改支持操作栏的外观。
@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);
}
}
我已经提到 previous/similar 有关如何解决此错误的问题。这些解决方案建议更改 onActivityCreated()
方法中的操作栏外观。我也试过onAttach()
。 None 似乎有效。我使用支持操作栏来保持向后兼容性。 Activity
也相应地转换为 ActionBarActivity
。
完整代码相当冗长,所以我跳过了 post。如果需要,我可以 post 完成代码并使用更多详细信息更新问题。
错误日志
Caused by: java.lang.NullPointerException
at com.example.testapp.fragments.NavigationDrawerFragment.onActivityCreated(NavigationDrawerFragment.java:215)
第 215 行是:mActionBar.setElevation(0);
只需使用:
mActionBar = getActivity().getSupportActionBar();
或:
mActionBar = ((yourActivityName)getActivity()).getSupportActionBar();
[更新]
删除行 mActionBar.setElevation(0);
因为 setElevation
仅适用于 API 21+
我错过了在这个问题中提到的更多信息。这就是其他好的 SO 用户无法正确回答的原因。所以在这里我自己回答。
我用 ToolBar 代替了常规的 ActionBar
。当您使用 ToolBar
时,您必须将其设置为 ActionBar。所以通过做 -
toolbar = (Toolbar) getActivity().findViewById(toolbarId);
((ActionBarActivity)getActivity()).setSupportActionBar(toolbar);
然后我可以通过 -
轻松更改标题和外观((ActionBarActivity)getActivity()).getSupportActionBar().setTitle(s);
在fragment中实际使用actionbar之前记得将toolbar设置为actionbar。