отправить запрос при нажатии на кнопку поиска на клавиатуре
У меня есть вид поиска в моем фрагменте. когда я нажимаю на него , клавиатура открыта, и я могу набирать текст. Я хочу, когда я нажимаю на кнопку поиска в клавиатуре, мой запрос Отправить на мой сервер и получить результат, но я не знаю, как получить событие поиска. есть решение?
4 ответа:
Вы должны расширить OnQueryTextListener, присоединить прослушиватель и реализовать onQueryTextSubmit.
Пример:
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); searchView = (SearchView) menu.findItem(R.id.mActionSearch).getActionView(); searchView.setOnQueryTextListener(this); return true; } @Override public boolean onQueryTextSubmit(String query) { //Do something here return false; } @Override public boolean onQueryTextChange(String newText) { return false; }
Ответ Pozzo Apps правильный
Но для api ниже 11 и библиотеки compat вы можете использовать что-то вроде этого:
MenuItem search_menu=(MenuItem)menu.findItem(R.id.action_search); SearchView searchView =(SearchView)MenuItemCompat.getActionView(search_menu);
Вы также можете применить setOnKeyListener в представлении поиска, как показано ниже:
searchview.setOnKeyListener(new View.OnKeyListener( { Public boolean onKey(View v, int keyCode, KeyEvent event) { if(event.getAction() == KeyEvent.ACTION_DOWN) { switch(keyCode) { Case KeyEvent.KECODE_ENTER: // Apply action which you want on search key press on keypad return true; default: break; } } return false; } });
Необходимо добавить новый OnQueryTextListener и реализовать onQueryTextSubmit. Это также работает во фрагменте.
Пример:
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.main_search, menu); SearchView sv = (SearchView) menu.findItem(R.id.action_search).getActionView(); sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { //Do something here Toast.makeText(getActivity(), "Search: " + query, Toast.LENGTH_SHORT ).show(); return false; } @Override public boolean onQueryTextChange(String newText) { return false; } }); super.onCreateOptionsMenu(menu,inflater); }