Android getSupportActionBar () возвращает null во фрагменте

ОБНОВИТЬ

Я ничего не упоминал об использовании ToolBar с ActionBarActivity . И именно по этой причине я всегда получаю исключение из null-указателя. Для тех, кто сталкивается с такой же проблемой, пожалуйста, ссылайтесь на этот ответ


У меня есть код фрагмента, чтобы изменить внешний вид панели действий поддержки при изменении фрагмента.

 @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() действий в onActivityCreated() . Я onAttach() попробовал onAttach() . Кажется, что никто не работает. Я использовал панель поддержки поддержки, чтобы поддерживать обратную совместимость. Activity также выполняется в соответствии с 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); 

Не забудьте установить панель инструментов как панель действий, прежде чем использовать панель действий в фрагменте.

Просто используйте:

 mActionBar = getActivity().getSupportActionBar(); 

или:

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

[ UPDATE ] Удалить линию mActionBar.setElevation(0); Потому что setElevation просто доступен для API 21+

Intereting Posts