Страницы

Поиск по вопросам

четверг, 20 июня 2019 г.

Свой toolbar для каждого Fragment'a

Использую несколько фрагментов, для которых есть отдельный тулбар. При добавлении тулбара подсвечивается в студии ошибка "activity.getSupportActionBar.setTitle() may produce java.nullpointerexeption". При этом фрагмент грузится, но все действия залипают, на другие фрагменты он не переходит. Прошу подсказать в чем ошибка?
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_three,container,false); Toolbar profile_toolbar = (Toolbar)view.findViewById(R.id.profile_toolbar); AppCompatActivity activity = (AppCompatActivity)getActivity(); activity.getSupportActionBar().setTitle("dgdfg"); return view; }
UPD. Ошибка крылась в использовании FragmentTabHost, почему-то вид с фрагментом залипал на фрагменте с использование тулбара. Пришлось заменить FragmentTabHost на TabHost


Ответ

Это не ошибка, а предупреждение Android Studio т.к. при определенных условиях метод getSupportActionBar() может вернуть null и вот тогда уже случится NullPointerException в вашем приложении. Чтобы это исключить, достаточно выполнить проверку на null. Тогда и студия перестанет пугать этим сообщением.
ActionBar actionBar = activity.getSupportActionBar(); if(actionBar!= null) { //какой то код }
Из-за этого скорей всего и залипают ваши фрагменты, т.к. вы только нашли ToolBar, но не установили его, потому getSupportActionBar() возвращает null. Попробуйте сделать так:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_three,container,false); Toolbar profile_toolbar = (Toolbar)view.findViewById(R.id.profile_toolbar); AppCompatActivity activity = (AppCompatActivity)getActivity(); activity.setSupportActionBar(profile_toolbar); ActionBar actionBar = activity.getSupportActionBar(); if(actionBar!= null) { actionBar.setTitle("dgdfg"); } return view; }

Комментариев нет:

Отправить комментарий