Я использую вид поиска в моем приложении. Теперь я просто хочу набрать текст в текстовом поле SearchView и отобразить его в другом текстовом представлении. Если я набрал текст и нажал кнопку, я могу сделать то же самое. Но я не хочу использовать дополнительные кнопки. Я просто хочу отобразить результат, когда я нажимаю клавишу ввода.
Как получить события поиска в android
Ответ 1
Попробуйте использовать setOnQueryTextListener SearchView
new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextChange(String newText) {
// your text view here
textView.setText(newText);
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
textView.setText(query);
return true;
}
}
Ответ 2
Вышеприведенный ответ хорош, но не полностью на самом деле вам нужно установить прослушиватель действий для вашего поиска. вы можете сделать это двумя способами, создав класс, который реализует необходимые классы, чтобы быть OnQueryTextListener, и создать новый объект и использовать его в качестве текстового прослушивателя запроса поиска или использовать следующую компактную форму:
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
callSearch(query);
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
// if (searchView.isExpanded() && TextUtils.isEmpty(newText)) {
callSearch(newText);
// }
return true;
}
public void callSearch(String query) {
//Do searching
}
});
Ответ 3
Это также можно сделать с помощью RXAndroid и RxBinding от Jake Wharton следующим образом:
RxSearchView.queryTextChanges(searchView)
.debounce(500, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<CharSequence>() {
@Override
public void call(CharSequence charSequence) {
if(charSequence!=null){
// Here you can get the text
System.out.println("SEARCH===" + charSequence.toString());
}
}
});
Код подписывается на наблюдение за изменением текста с некоторой задержкой в 500 миллисекунд.
Это ссылка на git repo для получения RXAndroid: https://github.com/JakeWharton/RxBinding
Ответ 4
Это то, что у меня есть внутри функции onCreateOptionsMenu(Menu menu)
в моей основной деятельности:
MenuItem searchItem = menu.findItem(R.id.search);
SearchView searchView = (SearchView) searchItem.getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
// Do whatever you need. This will be fired only when submitting.
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
// Do whatever you need when text changes.
// This will be fired every time you input any character.
return false;
}
});
Ответ 5
Правильный способ решить эту проблему - использовать setOnQueryTextListener
Это небольшой пример с использованием Kotlin:
txtSearch = rootView.searchView
txtSearch.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextChange(newText: String): Boolean {
return false
}
override fun onQueryTextSubmit(query: String): Boolean {
return false
}
})