При скрытии фрагмента текст запроса SearchView пуст

#android #android-fragments #show-hide #searchview

#Android #android-фрагменты #показать-скрыть #searchview

Вопрос:

У меня есть FoodListFragment и FoodDetailFragment . В FoodListFragment я установил SearchView в прослушивателе topBar with для querytextChange :

 @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        // Inflate the menu; this adds items to the action bar if it is present.
        this.getActivity().getMenuInflater().inflate(R.menu.main, menu);

        //Associate searchable configuration with the SearchView
        searchManager = (SearchManager) this.getActivity().getSystemService(Context.SEARCH_SERVICE);

        MenuItem searchItem = menu.findItem(R.id.search);
        searchView = (SearchView) searchItem.getActionView();

        searchView.setSearchableInfo(searchManager.getSearchableInfo(this.getActivity().getComponentName()));
        searchView.setMaxWidth(Integer.MAX_VALUE);
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {


            @Override
            public boolean onQueryTextChange(String textToFind) {
                // your text view here
                if (foodAdapter == null) {
                    foodAdapter = ((FoodListFragment) getFragmentManager().findFragmentByTag(Const.FOODLIST_FRAGMENT)).getFoodAdapter();
                }
                foodAdapter.getFilter().filter(textToFind.toString());
                return true;
            }

            @Override
            public boolean onQueryTextSubmit(String textToFind) {
                Log.d("submit by search", TAG);
                if (foodAdapter == null) {
                    foodAdapter = ((FoodListFragment) getFragmentManager().findFragmentByTag(Const.FOODLIST_FRAGMENT)).getFoodAdapter();
                }
                foodAdapter.getFilter().filter(textToFind.toString());
                searchView.clearFocus();
                return true;
            }

        });
        super.onCreateOptionsMenu(menu, inflater);
    }
  

Когда я переключаюсь с show и hide, с FoodListFragment на FoodDetailFragment :

 public void switchContent(int id, Fragment fragment, String tagFrag) {

    FragmentTransaction transaction = getFragmentManager().beginTransaction();

    if(fragment.isAdded()){
        transaction.show(fragment);
    } else {
        transaction.add(id, fragment, tagFrag);
    }

    transaction.addToBackStack(null);
    if(Const.FOODDETAIL_FRAGMENT.equals(tagFrag)){
        if(getFragmentManager().findFragmentByTag(Const.FOODLIST_FRAGMENT) != null){
            FoodListFragment foodListFrag = (FoodListFragment) getFragmentManager().findFragmentByTag(Const.FOODLIST_FRAGMENT);
            transaction.hide(foodListFrag);
        }
    }

    // Commit the transaction
    transaction.commit();

}
  

вызывается onQueryTextChange метод searchView with textToFind empty и поэтому, когда я возвращаюсь FoodListFragment , searchView не поддерживает последний поиск.
Почему он вызывается onQueryTextChange при скрытии фрагмента?

И почему textToFind пуст?

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

1. В вашем файле манифеста под тегом activity добавьте android: launchMode=»singleTop»

2. @VishalPuri это не работает. другие идеи?