如何在SearchView / Widget调用的搜索过程中传递额外的变量?

时间:2013-01-30 05:21:01

标签: android searchview

我在操作栏中成功使用搜索小部件来执行this guide之后的搜索。搜索很好,但我想知道如何在搜索上传递其他变量。相同的指南指出我可以覆盖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);
        // ...
    }
    

我的应用在创建搜索类时崩溃,因为appData始终为null

注意

onSearchRequested() 已被调用,但该捆绑包不会使其进入我的onCreate()方法。

传递的意图中的所有额外内容都是{user_query=my-query, query=my-query}

3 个答案:

答案 0 :(得分: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");

答案 1 :(得分:1)

您可以覆盖调用搜索的onSearchRequested内的Activity方法。

@Override
public boolean onSearchRequested() {
     Bundle appData = new Bundle();
     appData.putBoolean(SearchableActivity.JARGON, true);
     startSearch(null, false, appData, false);
     return true;
 }

然后您可以在SearchableActivity

中提取此数据
Bundle appData = getIntent().getBundleExtra(SearchManager.APP_DATA);
if (appData != null) {
    boolean jargon = appData.getBoolean(SearchableActivity.JARGON);
}

答案 2 :(得分:0)

我想你只想使用

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

因为意图包含您传递的包以开始搜索。