OnCreateOptionsMenu не вызывается во время транзакции фрагмента - PullRequest
0 голосов
/ 05 апреля 2020

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

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

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

 @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...
}

1 Ответ

0 голосов
/ 07 апреля 2020

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

//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);

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...