Здесь видно, что у меня есть SHERLOCK FRAGMENT ACTIVITY
которая содержит четыре FRAGMENTS
и SEARCH VIEW
. Есть 4 фрагмента, в которых последним является FRAGMENT SEARCH RESULTS
Мой вопрос заключается в том, как передавать данные поискового запроса в FRAGMENT SEARCH RESULTS
из поиска и отображать результат поиска в FRAGMENT SEARCH RESULTS
Я реализовал это
private void setupSearchView(MenuItem searchItem) { if (isAlwaysExpanded()) { mSearchView.setIconifiedByDefault(false); } else { searchItem.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); } mSearchView.setOnQueryTextListener(this); } public boolean onClose() { return false; } protected boolean isAlwaysExpanded() { return false; } @Override public boolean onQueryTextSubmit(String query) { if (query.length() > 0) { **//WHAT SHOULD I WRITE HERE** } return false; } @Override public boolean onQueryTextChange(String newText) { return false; }
Хороший пример здесь action-bar-search-view .
Чтобы отобразить результат поиска, вам необходимо передать submitYourQuery(query);
И верните true при успешном поиске.
Процесс хранения и поиска ваших данных уникален для вашего приложения. Вы можете хранить и искать свои данные разными способами. Хранение и поиск ваших данных – это то, что вам следует тщательно учитывать с точки зрения ваших потребностей и формата данных.
Получите более подробную информацию из документации android ReceivingTheQuery
@Override public boolean onQueryTextSubmit(String query) { if (query.length() > 0) { FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); Fragment newFragment = new SearchFragment(); //your search fragment Bundle args = new Bundle(); args.putString("query_string", query); newFragment.setArguments(args); transaction.replace(R.id.content_frame, newFragment); transaction.addToBackStack(null); transaction.commit(); } return false; }
Я нашел обходное решение, которое вы можете переопределить этот метод (startActivity (Intent)) в своей BaseActivity, а затем проверить, является ли действие ACTION_SEARCH, а затем выполнить специальную работу
@Override public void startActivity(Intent intent) { try { if (intent.getAction().equals(Intent.ACTION_SEARCH)) // Do ur job here start fragment for Example return; } catch (Exception e) { } super.startActivity(intent); }