OnCreateOptionsMenu не вызывается во время транзакции фрагмента

У меня есть фрагмент, который содержит меню поиска на панели инструментов. когда пользователь впервые щелкает элемент навигации, Fragment добавляется в действие, которое использует метод add FragmentManager, а затем это будет show, hide или remove из контейнера фрагментов в соответствии с логикой.

Моя проблема заключается в том, что когда я в первый раз нажимаю на меню поиска элемента навигации, оно отображается на панели инструментов, но потом, когда я возвращаюсь к этому фрагменту, иногда будет пустая панель инструментов без меню поиска. Как я могу это решить?

Вот код основной части фрагмента:

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_search, container, false);

    searchFragmentInstance = this;
    filterManager = new FilterManager();

    //set toolbar
    Toolbar toolbar = view.findViewById(R.id.toolbar_search);
    ((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);

    //other code...

    return view;
    }

Отобразите меню поиска на панели инструментов, используя это:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

    super.onPrepareOptionsMenu(menu);
    inflater.inflate(R.menu.search, menu);
    MenuItem item = menu.findItem(R.id.action_search);

    SearchManager searchManager = (SearchManager) getContext().getSystemService(Context.SEARCH_SERVICE);

    SearchView searchView = (SearchView) item.getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName()));
    searchView.setBackgroundColor(getResources().getColor(R.color.colorPrimaryDark));

  //other code...
}

person bhumi vaghasiya    schedule 05.04.2020    source источник
comment
stackoverflow.com/questions/41192921/   -  person Rafsanjani    schedule 05.04.2020
comment
ваш метод onCreate (во фрагменте) включает этот setHasOptionsMenu (true)?   -  person droidbaza    schedule 05.04.2020
comment
Да, он содержит этот метод @droidbaza   -  person bhumi vaghasiya    schedule 06.04.2020
comment
Я пробовал, но не работает @Rafsanjani   -  person bhumi vaghasiya    schedule 06.04.2020


Ответы (1)


Я решил эту проблему, добавив этот код:

//this method is called when the hidden state of the fragment is changed
//so when fragment is beign displayed using show method of fragment transaction
//this will be called

@Override
public void onHiddenChanged(boolean hidden) {
    super.onHiddenChanged(hidden);

    if(!hidden){
        //when fragment is not hidden anymore
        //convert the toolbar into actionbar
        Toolbar toolbar=(Toolbar)(((AppCompatActivity)getActivity()).findViewById(R.id.toolbar_search));
        ((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);

    }
}
person bhumi vaghasiya    schedule 07.04.2020