2011-08-04 15 views
13

私のアプリケーションでは、カスタムSearchViewを備えたアクションバーを使用しています。ユーザーが検索フィールドのEnterボタンを押したときにカスタムコードを使用したいしかし、ユーザーがSearchViewでEnterボタンを押した瞬間を捉える方法は見つけられません。AndroidカスタムSearchViewの検索アクションを作成する

今私は検索操作をキャプチャするいくつかの方法を試しましたが、私はそれを見つけるように見えます。

マイボタンは次のように定義されています。

  1. :ここでは、I`ve 2つのアプローチを試みたことがわかります

    public class CustomSearchView extends SearchView implements OnClickListener, android.view.View.OnKeyListener{ 
    
        public CustomSearchView(Context context) { 
         super(context); 
         this.setOnSearchClickListener(this); 
         this.setSubmitButtonEnabled(true); 
          this.setOnClickListener(this); 
         this.setOnKeyListener(this); 
        } 
    
        @Override 
        public void onClick(View v) { 
    
         Log.d("SEARCH", "Onclick! " + this.getQuery()); 
        } 
    
        @Override 
        public boolean onKey(View v, int keyCode, KeyEvent event) { 
         // TODO Auto-generated method stub 
    
         Log.d("SEARCH", "Search onkey"); 
         return false; 
        } 
    
    } 
    

    :これにより

    <item 
        android:id="@+id/action_bar_search" 
        android:title="Search" 
        android:icon="@drawable/ic_menu_search" 
        android:showAsAction="always" 
        android:actionViewClass="-package-.CustomSearchView" 
        /> 
    

    がCustomSearchViewクラスに属し送信ボタンからonclickイベントをキャッチします。それは SearchViewを開くために検索アイコンをクリックしたときにだけ起動したので、それは役に立たなかった。

  2. SearchView内のキーストロークをキャッチします。それはどちらかというと です。私がそこで押すキーからの応答はありませんでした。

誰でも、このSearchViewでカスタム検索アクションを作成する方法はありますか?

UPDATE:

PJLによって後述するように:あなたは、この動作をオーバーライドするためのカスタムダイアログを必要といけません。通常のSearchViewウィジェットはうまく動作します。

答えて

46

検索ビューを取得し、次のように私のメニューのレイアウトがあるちなみにOnQueryTextListener

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

を追加します。

<item android:id="@+id/menu_search" 
    android:showAsAction="ifRoom" 
    android:actionViewClass="android.widget.SearchView" /> 
+0

魅力的な作品です!助けてくれてありがとう! – Bart

+1

優秀なヒント、悲しみを救ってくれてありがとう – Bostone

+1

私はこれを使用して、アクティビティを起動せずにフラグメント内で検索を実行します。最良の結果を期待して:D – span

関連する問題