2016-03-29 6 views
1

と呼ばれていない私は私のapplication.Iで検索のようなのWhatsAppを実装しようとしています次の画面を実装する必要があります。検索可能な活動が

ScreenShot

あなたはスクリーンショットで見ることができるように、私は、検索アイコンを持っていますオプションメニューとして。

XML:検索アイコン検索ビューをクリックすると

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <item 
     android:id="@+id/action_search" 
     android:icon="@drawable/search" 
     android:orderInCategory="100" 
     android:title="@string/action_search" 
     app:actionViewClass="android.support.v7.widget.SearchView" 
     app:showAsAction="always|collapseActionView" /> 
</menu> 

が開かれます。

CODE:

public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater menuInflater = getMenuInflater(); 
    menuInflater.inflate(R.menu.menu_friend_list_activity, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.action_search: 
      Toast.makeText(getApplicationContext(), "Search button clicked", Toast.LENGTH_SHORT).show(); 

      // Associate searchable configuration with the SearchView 
      SearchManager searchManager = (SearchManager) FriendsListActivity.this.getSystemService(Context.SEARCH_SERVICE); 
      if (item != null) { 
       searchView = (SearchView) item.getActionView(); 
      } 
      if (searchView != null) { 
       searchView.setSearchableInfo(searchManager.getSearchableInfo(FriendsListActivity.this.getComponentName())); 
       searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
        @Override 
        public boolean onQueryTextSubmit(String query) { 
         Log.e("Query",query); 
         return false; 
        } 

        @Override 
        public boolean onQueryTextChange(String newText) { 
         return false; 
        } 
       }); 
      } 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 

} 

のAndroidManifest.xml

<activity 
     android:name=".activity.FriendsListActivity" 
     android:parentActivityName=".activity.WelcomeActivity"> 
     <!-- To display the search view--> 
     <meta-data 
      android:name="android.app.searchable" 
      android:resource="@xml/searchable" /> 
    </activity> 
    <activity android:name=".activity.SearchResultsActivity"> 
     <intent-filter> 
      <action 
       android:name="android.intent.action.SEARCH" 
       android:launchMode="singleTop" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW" /> 
     </intent-filter> 
    </activity> 

あなたは、私がSearchResultsActivityという名前の検索可能な活性を有し、ここで見ることができます。 私はthisチュートリアルに従っています。

SearchResultsACtivity:私は私が検索しようとしていますが間違っhere.When何かをやっていると思います

public class SearchResultsActivity extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 

    Log.e("onCreate","in SerachActivity called"); 
    handleIntent(getIntent()); 
} 

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

private void handleIntent(Intent intent) { 
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
     String query = intent.getStringExtra(SearchManager.QUERY); 
     Log.e("Query1",query); 
     //use the query to search your data somehow 
     } 
    } 
} 

、SearchResultsActivityをしなさいがのWhatsAppがそうであるようにどのように私は、検索を実装することができ、私を助けてと呼ばれていませんか?

+0

SearchResultsActivityはまだ起動していないため、 –

+0

でもTextWatcherには –

+0

@ MuratKを使用することができます。 :ドキュメントによると、 "検索可能なアクティビティは、クエリ文字列に基づいて検索を実行し、検索結果を表示するアプリケーションのアクティビティです。 ユーザーが検索ダイアログまたはウィジェットで検索を実行すると、検索可能なアクティビティが開始されますACTION_SEARCHアクションを使用してインテント内に検索クエリを配信します。あなたの検索可能なアクティビティは、インテントのQUERYの余分なものからクエリを取得した後、データを検索して結果を表示します。 " –

答えて

0

あなたはアンドロイドチュートリアルhereを読んでいると思います。そのページは完全に間違っていないと非常に混乱します。あなたのコードには2つの場所が間違っています。

  1. あなたがsearchView#setSearchableInfoを呼び出すと、あなたはあなたのケースのSearchResultsActivityには、検索結果を処理するために起動するためにどのような活動のAndroid指示しています。だからではなく、活動はそれがsearchManagerによって発見することができます検索可能になるようにするためにはSearchResultsActivity.searchView.setSearchableInfo(searchManager.getSearchableInfo(new ComponentName(this, SearchResultsActivity.class)))

  2. に変更し、FriendsListActivityにコンポーネント名を設定することはできません、あなたはにandroid.app.searchableメタデータラベルを追加する必要がありますマニフェスト内のアクティビティブロック。このラベルはで、はSearchViewを表示するアクティビティに追加する必要があることに注意してください。チュートリアルページには完全に間違っていると記載されています。したがって、SearchResultsActivityを次のように変更してください。あなたはこれらの2つの変更を加えた場合は

、FriendsListActivityからあなたのSearchViewは正しくSearchResultsAcitivityを開始することができますmSearchableインスタンスを保持しているでしょう。それ以外の場合はnullになります。

<activity android:name=".activity.SearchResultsActivity"> 
    <intent-filter> 
     <action 
      android:name="android.intent.action.SEARCH" 
      android:launchMode="singleTop" /> 
    </intent-filter> 
    <meta-data 
     android:name="android.app.searchable" 
     android:resource="@xml/searchable"/> 
    <intent-filter> 
     <action android:name="android.intent.action.VIEW" /> 
    </intent-filter> 
</activity> 
関連する問題