Страницы

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

понедельник, 9 марта 2020 г.

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

#android #android_fragment


Использую несколько фрагментов, для которых есть отдельный тулбар. При добавлении
тулбара подсвечивается в студии ошибка "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
    


Ответы

Ответ 1



Это не ошибка, а предупреждение 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; }

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

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