2017-12-01 9 views
1

SearchViewが動作していないようです。 SearchViewがメニューバーに表示され、テキストを入力できます。しかし、私の電話のオンスクリーンキーボードで検索アイコンをクリックすると、何も起こりません。理想的には、新しいアクティビティを開始し、使用するクエリ文字列を送信します。私はクリックを処理するためにSearchView.setOnSearchClickListenerメソッドを実装しようとしましたが、それを行うと、検索アイコンをクリックしてパラメータを指定せずにテキストを入力すると結果アクティビティが読み込まれます。私が間違っていることを特定する助けがあれば、大いに感謝します。SearchViewは結果アクティビティに意図を送信しません

は、私のようなメニューを作成するので、私の活動で:

public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.main_menu, menu); 

    // Associate searchable configuration with the SearchView 
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    final SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView(); 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 

    return true; 
} 

public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.convert: 
      ... 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

と検索のためのxml:私も活動中でマニフェストにこれを追加しました

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto"> 
     <item android:id="@+id/search" 
      android:title="@string/search" 
      android:icon="@android:drawable/ic_menu_search" 
      app:showAsAction="always" 
      android:actionViewClass="android.support.v7.widget.SearchView" 
      app:actionViewClass="android.support.v7.widget.SearchView"/> 

     <item android:id="@+id/convert" 
      android:title="@string/dlconvert" /> 
    </menu> 

どこ検索ショー:

<meta-data 
     android:name="android.app.searchable" 
     android:resource="@xml/searchable"/> 

そして、これは、検索結果の活動の定義です:

<activity android:name=".ActivitySearchResults"> 
     <meta-data 
      android:name="android.app.searchable" 
      android:resource="@xml/searchable"/> 

     <intent-filter> 
      <action android:name="android.intent.action.SEARCH"/> 
     </intent-filter> 
    </activity> 

searchable.xmlファイルだけ含まれています

<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
     android:label="@string/app_name" 
     android:hint="Search..." /> 

EDIT - 問題が重複する可能性と同じではありませんが。意図を受け取るはずの活動は決して始まらない。あなたのonCreateOptionsMenu()

+0

[SearchViewが意図しない検索可能なアクティビティを起動する](https://stackoverflow.com/questions/35346074/searchview-launches-searchable-activity-without-intent) – ADM

+0

あなたはそれを解決しましたか? – Prem

+1

@Prem私は、ありがとう。 – chaoskreator

答えて

0

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
    @Override 
    public boolean onQueryTextSubmit(String query) { 
     Intent intent = new Intent(MainActivity.this, SearchActivity.class); 
     intent.putExtra("searchTerm", query); 
     startActivity(intent); 
     return false; 
    } 

    @Override 
    public boolean onQueryTextChange(String newText) { 
     return false; 
    } 
}); 
0

あなたはonQueryTextSubmit()方法

public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.main_menu, menu); 

    // Associate searchable configuration with the SearchView 
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    final SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView(); 
    searchView.setOnQueryTextListener(new OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextChange(String newText) { 
      //Log.e("onQueryTextChange", "called"); 
      return false; 
     } 

     @Override 
     public boolean onQueryTextSubmit(String query) { 
      // start acitivy here 
      return false; 
     } 

    }); 
    return true; 

}

1

を試しに検索ビュー

そして、あなたの希望の動作にsetOnQueryTextListenerを実装することを確認してくださいimplements SearchView.OnQueryTextListenerより

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.search_menu, menu); 

     MenuItem item = menu.findItem(R.id.action_search); 
     SearchView searchView = (SearchView) MenuItemCompat.getActionView(item); 
     searchView.setOnQueryTextListener(this); 

     SearchView.SearchAutoComplete searchAutoComplete = searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text); 
     searchAutoComplete.setHintTextColor(Color.GRAY); 
     searchAutoComplete.setTextColor(Color.BLACK); 


     return true; 

    } 

あなたの活動ANSオーバーライドメソッド

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
    @Override 
    public boolean onQueryTextSubmit(String query) { 
     Intent intent = new Intent(Activity.this, SearchActivity.class); 
     intent.putExtra("query", query); 
     startActivity(intent); 
     return false; 
    } 

    @Override 
    public boolean onQueryTextChange(String newText) { 
     return false; 
    } 
}); 
1

にでもonQueryTextSubmitを実施した後、問題が継続します。問題を検索してから、マニフェストファイルの不正なアクティビティ定義に<action android:name="android.intent.action.SEARCH"/>インテントフィルタがあることがわかりました。

関連する問題