2013-02-21 1 views
0

팝업 창을 사용 중이고 해당 창 내에서 검색보기가 있습니다. 검색보기를 클릭하면 소프트 키보드가 화면에 나타납니다. 따라서 검색 버튼을 누르거나 keybaord에서 버튼을 입력 할 때마다 검색보기에서 데이터를 가져 와서 관련 정보를 표시하려고합니다. OnKeyListener을 사용하여 키를 가져 왔지만 입력 및 검색 키 프레스를 등록하지 않았습니다.Android OnKeyListener에 입력 및 검색 키가 등록되어 있지 않습니다.

내 코드 :

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

답변

0

getKeyCode() 대신 arg2.getAction()을 사용하면 효과가 있습니다.

+0

이전에는 작동하지 않았습니다. – Ravi

1

당신은 getKeyCode()을하지 getAction().

IME action listener을 사용하면이 문제를 해결할 수 있습니다.

+0

미안의 일부입니다하지만 당신은 액션 리스너를 시도해 봤어 내가 키 코드도 – Ravi

+0

작동하지 않음으로 시도? – alex

+0

하드웨어 키보드에서 키를 누르는 중이 기능이 작동하지만 소프트 키보드로 작동하지 않는 경우이 문제가 내가 edittext 또는 serachview 팝업 창에 있는지 여부를 알려주십시오 – Ravi

0

searchView는 키보드의 콜백에 있습니다.

setOnQueryTextListener에서 검색/입력을 처리하십시오.

  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; 
      } 
     }); 
    } 
관련 문제