#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 это не работает. другие идеи?