2017-03-01 7 views
0

私はここでの例を、以下の既存のアプリで検索を実装しようとしています:
http://www.materialdoc.com/search-filter/の表示検索結果ではなく、活動

アプリはフラグメントが表示さを変更するには交換し、その代わりに別のものを作成するので使用しています私は結果を別の断片に表示しようとしています。問題は、検索文字列が入力され、拡大クラスがそれである場合、ハンドラは呼び出されないということです。

私は、主な問題は、MainActivity.onCreateOptionsMenu()に、このコードではあると思う:

// Associate searchable configuration with the SearchView 
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
    ComponentName componentName = new ComponentName(this, MainActivity.class); 
    // ComponentName componentName = new ComponentName(this, SearchListFragment.class); // results in NPE 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(componentName)); 

NPEでSearchListFragment.class結果でそれを何もして呼び出していないんMainActivity.classsetSearchableInfo()を呼び出します。

私はここSSCCEを作成しました:
https://github.com/emnrd-ito/SearchFragmentTest

は、あなたがこの問題を解決する方法を見ることができますか?

+0

あなたは何をしようとしているのですか?マニフェストで検索の 'Activity'を定義し、検索' Intent'を処理するなど、あなたが参照するサンプルから抜けている部分があります。 'Activity'の代わりに' Fragment'検索を使用しようとしていますか?私は何が欠けていますか? – Cheticamp

+0

私はMainActivityを使用しようとしていますが、別のアクティビティは使用していません。現在、すべての従業員のリストが表示され、検索された従業員リストはその一部であるため、すべての従業員リストに類似した方法でそのリストを表示することができます。 –

答えて

1

次はあなたが道のほとんどを取得する必要があり、次のようにマニフェストを変更

を:

<activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:launchMode="singleTop"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <action android:name="android.intent.action.SEARCH" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     <meta-data 
      android:name="android.app.searchable" 
      android:resource="@xml/searchable" /> 
    </activity> 

これは新しいlaunchmodeまたは「singleTop」、「検索」の意図、および含みmeta-dataが必要です。 MainActivityで

OnCreateOptionsMenu

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

    // Associate searchable configuration with the SearchView 
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
// ComponentName componentName = new ComponentName(this, SearchListFragment.class); 
// searchView.setSearchableInfo(searchManager.getSearchableInfo(componentName)); 

    return true; 
} 

onNewIntent

@Override 
public void onNewIntent(Intent intent) { 
    Log.d("onNewIntent", "here!"); 
} 

あなたの検索ものを行うためにonNewIntentを展開する必要があります。 Intentには検索条件が含まれています。詳細については、を参照してください。

私はそれらがすべて変更だと思います。それは完全な解決策ではありませんが、残りの部分を理解するためにあなたを道に導くことを願っています。

+0

これを試してみますが、うまくいくかどうかはわかりません。私は 'onNewIntent'で試してみましたが、アクティビティが再起動されたときにだけ呼び出されるため、動作させることができませんでした。 –

+0

'android:launchMode =" singleTop "'をマニフェストに入れるようにしてください。そうでなければ、 'onCreate'を検索します。これはあなたが望むものではありません。これは動作します。 – Cheticamp

+0

あなたが提案したコードを実装しました。 'onNewIntent'が今呼び出されている点で優れています。私が前にそれを試したとき、私はそれがマニフェストで正しく設定されていないと思う(あなたのコードを見て)。リストが表示されないという問題がまだ残っています。タイトルは表示されますが、リストは表示されません。デバッグでは、アダプタのリストが作成されていますが、何らかの形で表示されていないことがわかります。私はあなたが見ることができるようにgithubプロジェクトに変更をプッシュしました。 –

関連する問題