Android 单击键盘上的搜索按钮时提交查询

Android 单击键盘上的搜索按钮时提交查询,android,keyevent,searchview,Android,Keyevent,Searchview,我的片段中有搜索视图。当我点击它时,键盘是打开的,我可以输入文本。我想当我点击键盘上的搜索按钮时,我的查询发送到我的服务器并得到结果,但我不知道如何得到搜索事件。任何解决方案?您必须扩展、连接侦听器并实现 例如: @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); searchView = (SearchView) menu.

我的片段中有搜索视图。当我点击它时,键盘是打开的,我可以输入文本。我想当我点击键盘上的搜索按钮时,我的查询发送到我的服务器并得到结果,但我不知道如何得到搜索事件。任何解决方案?

您必须扩展、连接侦听器并实现

例如:

@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;
}
@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);
}

Pozzo应用程序的答案是正确的

但对于低于11的api和compat库,您可以使用以下内容:

    MenuItem search_menu=(MenuItem)menu.findItem(R.id.action_search);
    SearchView searchView =(SearchView)MenuItemCompat.getActionView(search_menu);

您还可以在搜索视图上应用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;
       }
 });

您必须添加新的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;
}
@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);
}

stackoverflow不允许我接受你的回答,直到5分钟过去,我的朋友;)这仍然很有效。我想知道3年后现在是否有更好的解决方案。