2016-07-27 4 views
2

次のコードスニペットを使用して、HomeActivityのツールバーに検索機能を有効にします。クエリを入力すると、アプリケーションはNearbySearchActivityに移動し、結果を表示します。SearchViewでクエリを送信できません

ツールバーが表示され、アイコンをクリックして表示されるSearchViewでクエリを入力できます。しかし、ソフトウェアキーボードの拡大鏡をクリックすると消えてしまい、何も起こりません。

HomeActivity:HomeActivityのナビゲーションアイコンの

public class HomeActivity extends AppCompatActivity implements 
     NavigationView.OnNavigationItemSelectedListener { 

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

     SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
     SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView(); 
     searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 

     return true; 
    } 
} 

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="Search" 
     android:icon="@drawable/ic_search" 
     app:showAsAction="collapseActionView|ifRoom" 
     app:actionViewClass="android.support.v7.widget.SearchView" /> 
</menu> 

AndroidManifest:

<activity android:name=".NearbySearchActivity"> 
    <intent-filter> 
     <action android:name="android.intent.action.SEARCH" /> 
    </intent-filter> 
    <meta-data 
     android:name="android.app.searchable" 
     android:resource="@xml/searchable" /> 
</activity> 
<activity 
    android:name=".HomeActivity" 
    android:label="@string/home_title" 
    android:theme="@style/AppTheme.NoActionBar" > 
    <meta-data android:name="android.app.default_searchable" 
     android:value=".NearbySearchActivity" /> 
</activity> 

検索可能なXML:

<?xml version="1.0" encoding="utf-8"?> 
<searchable 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:label="search"/> 

NearbySearchActivity:

public class NearbySearchActivity extends AppCompatActivity { 

    private String query = ""; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_nearby_search); 

     handleIntent(getIntent()); 
    } 

    @Override 
    protected void onNewIntent(Intent intent) { 
     handleIntent(intent); 
    } 

    private void handleIntent(Intent intent) { 
     if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
      query = intent.getStringExtra(SearchManager.QUERY); 
     } 
    } 
} 

どのように私は私が入力したクエリを提出し、NearbySearchActivityに行くことができますか?

+0

あなたのOnCreateOptionMenuには、setOnQueryTextChangeListenerが実装されています。 – Amir

答えて

2

SearchViewのOnQueryTextListenerを設定していますか?このリスナーは、変更または送信された照会をlistenします。

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
    @Override 
    public boolean onQueryTextSubmitted(String query) { 
     // Called when the user submits the query. 
     return true; 
    } 

    @Override 
    public boolean onQueryTextChange(String newText) { 
     // Called when the query text is changed by the user. 
     return true; 
    } 
} 
+0

それは動作します!ありがとう! –

関連する問題