13

アクション バーの検索ウィジェットを使用して、このガイドに従って検索を実行しています。検索は問題ありませんが、検索で追加の変数を渡す方法を知りたいです。同じガイドにはオーバーライドできると記載されていますonSearchRequested()が、これは検索ウィジェットでは機能しないようです。

  • 問題のオーバーライド:

    @Override
    public boolean onSearchRequested() {    
        Bundle appData = new Bundle();
        appData.putString("KEY", "VALUE");
        startSearch(null, false, appData, false);
        return true;
    }
    
  • アクティビティ クラスでバンドルを取得する:

    protected void onCreate(Bundle savedInstanceState) {
        // ...
        Intent intent = getIntent();
        Bundle appData = intent.getBundleExtra(SearchManager.APP_DATA);
        String value = appData.getString("KEY");
        Log.d("VALUE", value);
        // ...
    }
    

appDatais always であるため、検索クラスの作成時にアプリケーションがクラッシュしますnull

ノート

onSearchRequested() 呼び出されますが、バンドルがメソッドに到達しませんonCreate()

渡されたインテントからのすべてのエクストラは{user_query=my-query, query=my-query}.

4

3 に答える 3

25

これを行う唯一の方法は、検索対応のアクティビティで作成された新しいアクティビティを傍受することです。これを行うには、startActivity()メソッドをオーバーライドします。次に、アクティビティが実際に検索アクティビティであることを確認してから、インテントにエクストラを追加します。作業コードは以下のとおりです。

@Override
public void startActivity(Intent intent) {      
    // check if search intent
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
        intent.putExtra("KEY", "VALUE");
    }

    super.startActivity(intent);
}

その後、次を使用して、検索アクティビティで他のエクストラと同じようにエクストラを取得できます。

mValue = intent.getStringExtra("KEY");
于 2013-02-03T20:06:55.493 に答える
0

私はあなたがただ使いたいと思う

String value = intent.getStringExtra(SearchManager.APP_DATA);

検索を開始するために渡したバンドルがインテントに保持されているためです。

于 2013-01-30T05:33:34.300 に答える