I have a SearchView. When the user clicks on the keyboard search button, I need to make a server call. What does the code for the listener look like? I am thinking I have to use OnClickListener. But the internal code for knowing it's the search button, I am not sure how to determine that.
Asked
Active
Viewed 2.8k times
20
-
It sends the KeyEvent#KEYCODE_SEARCH key so you would look for that with an onKeyEventListener or activity's dispatchKeyEvent – DeeV Oct 10 '14 at 19:31
-
@DeeV The docs say that onKeyEventListener is for hardware key. Why would it specifically say hardware if it equally applies to the soft keyboard? In any case, I will try it since you say it's the answer. – learner Oct 10 '14 at 19:34
-
@DeeV I already tried onEditorActionListener before asking the question. But the SearchView does not recognize it. – learner Oct 10 '14 at 19:39
-
show some code of your search view – Qadir Hussain Oct 10 '14 at 19:39
-
1@QadirHussain do you even understand the question? Your catch-all comment does not belong here. – Konsol Labapen Oct 10 '14 at 19:41
-
There's an interesting workaround here: [SearchView listen for IME actions](http://stackoverflow.com/a/33385262/383414) – Richard Le Mesurier Oct 28 '15 at 08:18
4 Answers
73
I have done like this
the onQueryTextSubmit
is the method you are looking for.
set setOnQueryTextListener
on your search view.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
MenuItem searchItem = menu.findItem(R.id.search_city);
searchView = (SearchView) searchItem.getActionView();
searchView.setQueryHint("Search View Hint");
searchView.setOnQueryTextListener(new OnQueryTextListener() {
@Override
public boolean onQueryTextChange(String newText) {
//Log.e("onQueryTextChange", "called");
return false;
}
@Override
public boolean onQueryTextSubmit(String query) {
// Do your task here
return false;
}
});
return true;
}
hope this help

Qadir Hussain
- 8,721
- 13
- 89
- 124
2
This is the kotlin version:
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextChange(s: String): Boolean {
// make a server call
return true
}
override fun onQueryTextSubmit(s: String): Boolean {
val intent = Intent(applicationContext, YourSearchableActivity::class.java)
intent.putExtra(SearchManager.QUERY, s)
intent.putExtra(CUSTOM_MESSAGE, "you can also add custom message when submitting the search action")
intent.setAction(Intent.ACTION_SEARCH)
startActivity(intent)
return true
}
})

arjunaskykok
- 946
- 10
- 17
2
Here you can go for the Android best answer not Kotlin
binding.edtSearch.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
// Your piece of code on keyboard search click
if (AppValidator.isValid(SearchEventsActivity.this, binding.edtSearch, "Please enter your search keyword.")) {
searchKeyword = binding.edtSearch.getText().toString().trim();
//Search Events categories
callSearchEventsApi();
}
return true;
}
return false;
}
});
Make sure you have added following line in your EditText
android:imeOptions="actionSearch"
Just like following:-
<EditText
android:id="@+id/edtSearch"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginLeft="@dimen/_15dp"
android:background="@null"
android:fontFamily="@font/roboto_regular"
android:textColorHint="@color/text_color_light"
android:layout_gravity="center"
android:textSize="@dimen/_16sp"
android:maxLines="1"
android:singleLine="true"
android:imeOptions="actionSearch"
android:hint="@string/search"/>
I hope this will help you to solve your issue.!!!!

Karanvir Singh
- 71
- 1
- 2
0
SearchView method
setOnQueryTextLister
will do your work as below shown.
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
showSnackBar(query.toString());
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
});
Here searchView is object of SearchView.

DjP
- 4,537
- 2
- 25
- 34