Android SearchView на ActionBar, обнаружение щелчка по поиску

В моем приложении, как и во многих других, есть общий виджет поиска (http://developer.android.com/guide/topics/search/search-dialog.html#UsingSearchWidget).

Я бы изменил фрагмент (и передал ему искомый термин) только при нажатии кнопки поиска на клавиатуре.

я пробовал с

searchView.setOnSearchClickListener(new OnClickListener() { 
@Override public void onClick(View v) { 
} });

но он срабатывает, когда вы нажимаете кнопку НА ПАНЕЛИ ДЕЙСТВИЙ, которая разворачивает ввод поиска, а не при нажатии кнопки поиска на клавиатуре.

Вы знаете, как это возможно?


person rodi    schedule 20.06.2014    source источник


Ответы (6)


Вы можете использовать это для обнаружения нажатия клавиши поиска в строке поиска:

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

            @Override
            public boolean onQueryTextSubmit(String s) {
                [You actions here]
                return false;
            }
}
person Timur Gilfanov    schedule 11.08.2014

Попробуйте этот код. Он очень маленький и понятный.

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


        // Associate searchable configuration with the SearchView
        SearchManager searchManager =
                (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView =
                (SearchView) menu.findItem(R.id.search).getActionView();
        final EditText searchEditText = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);

        searchEditText.setHint("Search");

        searchEditText.setHintTextColor(getResources().getColor(R.color.white));
        searchView.setSearchableInfo(
                searchManager.getSearchableInfo(getComponentName()));

        searchEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView view, int actionId, KeyEvent event) {
                if (actionId == EditorInfo.IME_ACTION_SEARCH) {
                    //run query to the server
                    Log.e("onClick: ", "-- " + searchEditText.getText().toString().trim());

                }
                return false;
            }
        });


        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.

        return super.onOptionsItemSelected(item);
    }

Файл menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/search"
        android:icon="@android:drawable/ic_menu_search"
        android:title="Search"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="always" />

</menu>
person Jignesh Goyani    schedule 13.05.2016

Это код, который я использовал для моего edittext. Подобная вещь может сработать для вас:

editTextSearch.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView view, int actionId, KeyEvent event) {
    if (actionId == EditorInfo.IME_ACTION_SEARCH) {
      //run query to the server
    }
    return false;
}
});
person Illegal Argument    schedule 20.06.2014

Во-первых, установите параметр IME как IME_ACTION_SEARCH для SearchView (хотя клавиатура может установить его автоматически)

searchView.setImeOptions(EditorInfo.IME_ACTION_SEARCH);

Затем проверьте, нажат ли значок поиска на клавиатуре или нет.

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

          public boolean onQueryTextSubmit(String query) {
               searchView.clearFocus();     // Close keyboard on pressing IME_ACTION_SEARCH option
               Log.d(TAG, "QueryTextSubmit : "+ query);
               //load search query
               return true;
    }

          @Override
          public boolean onQueryTextChange(String newText) {
               Log.d(TAG, "QueryTextChange: "+ newText);
               return false;
          }
});

ПРИМЕЧАНИЕ. Здесь при нажатии значка поиска на клавиатуре вызывается onQueryTextSubmit().

Более того, serchView.clearFocus() сворачивает клавиатуру.

Надеюсь, это то, что вы ищете.

person Rachit Agarwal    schedule 02.10.2016

Для меня я получал EditText из SearchView и перехватывал «setOnEditorActionListener», но действие поиска по умолчанию все еще выполнялось, действие обновлялось после отправки. Чтобы решить эту проблему, я удалил

searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

Из моего метода onCreateOptionsMenu, и теперь все работает отлично

person Ndivhuwo    schedule 21.10.2018

 searchView.setOnSearchViewListener(new MaterialSearchView.SearchViewListener()
    {
        @Override
        public void onSearchViewShown()
        {
            //write your code
        }

        @Override
        public void onSearchViewClosed()
        {
            //write your code 
        }
    });

Надеюсь это поможет.

person AkashToSky    schedule 04.01.2019