0

ポップアップ ウィンドウを使用しており、そのウィンドウ内に検索ビューがあります。検索ビューをクリックすると、ソフト キーボードが画面に表示されます。したがって、検索ボタンを押すかキーボードからボタンを入力すると、検索ビューからデータが取得され、関連情報が表示されます。キーを取得するために を使用しOnKeyListenerていますが、Enter キーと検索キーの押下が登録されていません。

私のコード:

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

getAction()ではなくgetKeyCode()が必要です。

IMEアクションリスナーを使用することは、これを達成するための別の方法です。

于 2013-02-21T04:39:47.630 に答える
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 に答える
0

getKeyCode() の代わりに arg2.getAction() を使用すると、動作するはずです。

于 2013-02-21T04:58:21.063 に答える