我在我的片段中有一个搜索视图。当我点击它时,键盘会打开并且我可以输入文本。我想要的是,当我点击键盘上的搜索按钮时,我的查询将发送到服务器并获得结果,但我不知道如何获取搜索事件。有什么解决方案吗?
我在我的片段中有一个搜索视图。当我点击它时,键盘会打开并且我可以输入文本。我想要的是,当我点击键盘上的搜索按钮时,我的查询将发送到服务器并获得结果,但我不知道如何获取搜索事件。有什么解决方案吗?
你需要扩展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和兼容库,您可以使用类似以下代码:
MenuItem search_menu=(MenuItem)menu.findItem(R.id.action_search);
SearchView searchView =(SearchView)MenuItemCompat.getActionView(search_menu);
您需要添加新的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);
}
您也可以在搜索视图上应用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;
}
});