我在我的应用程序中使用了一个搜索视图。现在,我只想获取在SearchView文本框中输入的文本,并在另一个文本视图中显示它。如果我输入了文本并单击按钮,我可以做到相同的事情。但我不想使用任何额外的按钮。我只希望在按下回车键时显示结果。
我在我的应用程序中使用了一个搜索视图。现在,我只想获取在SearchView文本框中输入的文本,并在另一个文本视图中显示它。如果我输入了文本并单击按钮,我可以做到相同的事情。但我不想使用任何额外的按钮。我只希望在按下回车键时显示结果。
尝试使用SearchView的setOnQueryTextListener
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;
}
}
上面的回答很好,但实际上它并不完整,你需要为你的搜索视图设置一个操作监听器。你可以通过两种方式来实现这一点:创建一个实现必要类以成为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
}
});
使用Jake Wharton的RXAndroid和RxBinding,也可以这样实现:
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毫秒。
这是获取RXAndroid的git仓库链接: https://github.com/JakeWharton/RxBinding
searchView.setOnQueryTextListener(object : OnQueryTextListener {
override fun onQueryTextChange(newText: String): Boolean {
return false
}
override fun onQueryTextSubmit(query: String): Boolean {
// task HERE
return false
}
})
txtSearch = rootView.searchView
txtSearch.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextChange(newText: String): Boolean {
return false
}
override fun onQueryTextSubmit(query: String): Boolean {
return false
}
})
SearchViewExtensions.kt
文件。import android.view.View
import androidx.appcompat.widget.SearchView
inline fun SearchView.onQueryTextChanged(crossinline listener: (String) -> Unit) {
this.setOnQueryTextListener(object: SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?): Boolean {
return true
}
override fun onQueryTextChange(newText: String?): Boolean {
listener(newText.orEmpty())
return true
}
})
}
在你的片段中,有魔力
mSearchView.onQueryTextChanged { query: String ->
// do whatever
}
这是我在主活动中的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;
}
});