отправить запрос при нажатии на кнопку поиска на клавиатуре


У меня есть вид поиска в моем фрагменте. когда я нажимаю на него , клавиатура открыта, и я могу набирать текст. Я хочу, когда я нажимаю на кнопку поиска в клавиатуре, мой запрос Отправить на мой сервер и получить результат, но я не знаю, как получить событие поиска. есть решение?Введите описание изображения здесь

4 5

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