2013-04-13 18 views
5

私はSearchViewを使用しようとしていますが、空の文字列を検索する場合を除いて、すべて機能するようになっています。
最後の文字を削除するとonQueryTextChangeが反応しますが、検索フィールドが空のときにユーザーが検索ボタンを押すことができるようにします。Android SearchViewの空の文字列

final SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() { 
       @Override 
       public boolean onQueryTextChange(String newText) { 
        // Do something 
        return true; 
       } 

       @Override 
       public boolean onQueryTextSubmit(String query) { 
        // Do something 
        return true; 
       } 
      }; 

     searchView.setOnQueryTextListener(queryTextListener); 

また、OnKeyListnerを試してみました。しかし、どちらもうまくいかないようです。

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

       //Do something 
       return true; 
      } 
     }); 

これは簡単なことですが、動作させることはできません。助言がありますか?

編集

私は今、しばらくのためのソリューションを探していると、ちょうど数分これを投稿した後、私は解決策を見つけました。
このスレッドでは、バグではないことがわかりましたが、実際は意図的でした。

Android SearchView.OnQueryTextListener OnQueryTextSubmit not fired on empty query string

だから、僕はActionBarSherlockをダウンロードし、方法onSubmitQuery(にいくつかの変更をした)

private void onSubmitQuery() { 
    CharSequence query = mQueryTextView.getText(); 
    if (query != null && TextUtils.getTrimmedLength(query) > 0) { 
     if (mOnQueryChangeListener == null 
       || !mOnQueryChangeListener.onQueryTextSubmit(query.toString())) { 
      if (mSearchable != null) { 
       launchQuerySearch(KeyEvent.KEYCODE_UNKNOWN, null, query.toString()); 
       setImeVisibility(false); 
      } 
      dismissSuggestions(); 
     } 
    } 
} 

そして、修正版

private void onSubmitQuery() { 
    CharSequence query = mQueryTextView.getText(); 
    if(query == null) {query = "";} 
    if (mOnQueryChangeListener == null 
       || !mOnQueryChangeListener.onQueryTextSubmit(query.toString())) { 
     if (mSearchable != null) { 
       launchQuerySearch(KeyEvent.KEYCODE_UNKNOWN, null, query.toString()); 
       setImeVisibility(false); 
     } 
     dismissSuggestions(); 
    } 
} 

・ホープ、このことができますから、他の誰かがこのprを持っているならオベレム。

+1

オリジナルの質問を編集するのではなく、自分の質問に答えることができます。 – theblang

答えて

0

あなたのアプリには適していないかもしれませんが、単純なEditTextを使用してから、TextWatcherリスナーを追加することもできます。こうすることで、ユーザーが空文字列を入力してもすべての入力を捕捉できます。

0

ので、私はSearchViewの一部である(How do I trigger an action when the user has hit enter?)ガイドhttp://novoda.com/blog/styling-the-actionbar-searchview/に示すように、独自のSearchViewをスタイリングとのEditTextのためOnEditorActionListener設定で構成されている解決策を考え出した私はSearchViewと同じ問題があったが、私はActionBarSherlockを使用する必要はありませんでした。

final SearchView searchView = (SearchView)findViewById(R.id.search); 
int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null); 
EditText searchPlate = (EditText) searchView.findViewById(searchPlateId); 
searchPlate.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
    @Override 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 

     if (actionId == EditorInfo.IME_ACTION_SEARCH) { 
      //Do something 
     } 
     return false; 

    }); 
関連する問題