0

我正在使用弹出窗口,在该窗口中我有一个搜索视图。单击搜索视图后,屏幕上会出现软键盘。所以我希望每当我按下搜索按钮或从键盘输入按钮时,它都会从搜索视图中获取数据并显示相关信息。我正在使用 anOnKeyListener来获取密钥,但它没有注册输入和搜索按键。

我的代码:

searchview.setOnKeyListener(new OnKeyListener() {
        @Override
        public boolean onKey(View arg0, int arg1, KeyEvent arg2) {

            if(arg2.getKeyCode() == KeyEvent.KEYCODE_SEARCH || arg2.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
                popupwindow.setFocusable(false);
                System.out.println("search pressed");
                Toast.makeText(getApplicationContext(), "Search Pressed", 0).show();    
            }
            return false;
        }
}); 
4

3 回答 3

1

你想要getKeyCode()而不是 getAction()。

使用IME 动作侦听器将是实现此目的的另一种方法。

于 2013-02-21T04:39:47.630 回答
0

使用 arg2.getAction() 而不是 getKeyCode() 它应该可以工作。

于 2013-02-21T04:58:21.063 回答
0

searchView 有它来自键盘的回调。

在 setOnQueryTextListener 中处理搜索/输入。此侦听器有 2 个回调:

  1. 一个 onQueryTextSubmit
  2. 和一个 onQueryTextChange

两者都从您的键盘中获取事件。

这是我的代码的一部分(在 onCreateOptionsMenu 中调用)

    MenuItem searchItem = menu.findItem(R.id.action_search);

    SearchManager searchManager = (SearchManager) SearchActivity.this.getSystemService(Context.SEARCH_SERVICE);

    if (searchItem != null) {
        final SearchView searchView = (SearchView) searchItem.getActionView();
        if (searchView != null) {
            searchView.setSearchableInfo(searchManager.getSearchableInfo(SearchActivity.this.getComponentName()));
        }

        if (searchView == null) {
            return true;
        }

        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

            @Override
            public boolean onQueryTextSubmit(String query) {
            // handle text submitted by user in here
                String text = query;
                searchView.setQuery("", false);
                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(searchView.getWindowToken(), 0);
                if (text.length() > 0) downloadSearchQuery(text);
                return true;
            }

            @Override
            public boolean onQueryTextChange(String newText) { 
            // handle text changed here
                String mQueryString = newText.toString().trim();
                if (mQueryString.toString().trim().length() >= 3) {
                    downloadSearchQuery(mQueryString.toString().trim());
                } else {
                    if (mSearchList.size() != 0) {
                        mSearchList.clear();
                        mAdapter.notifyDataSetChanged();
                    }
                    checkAdapterIfEmpty();
                }
                return true;
            }
        });
    }
于 2015-07-02T12:35:23.900 回答