2

收到我实现一个活动,我想添加一个搜索栏。我希望当前的活动能够收回意图。我跟着可用的几个例子,在我的应用程序添加下面的代码:搜索意图不是当前活动

AndroidManifest.xml中

<activity 
     android:name=".search.BrowseCategory" 
     android:launchMode="singleTop" 
     android:windowSoftInputMode="stateHidden"> 
     <intent-filter> 
      <action android:name="android.intent.action.SEARCH" /> 
     </intent-filter> 

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

我加在AndroidManifest.xml以下下的应用程序标签:

<meta-data 
      android:name="android.app.default_searchable" 
      android:value=".search.BrowseCategory" /> 

现在我的BrowseCategory活动:

@Override 
protected void onNewIntent(Intent intent) { 
    Log.d(getPackageName(), "Search intent received!"); 
    setIntent(intent); 
    handleIntent(intent); 
} 

private void handleIntent(Intent intent) { 
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
     String query = intent.getStringExtra(SearchManager.QUERY); 
     // Do work using string 
     doSearch(query); 
    } 
} 

private void doSearch(String query) {...} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.search_filter, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) 
{ 
    switch(item.getItemId()) 
    { 
     case R.id.search: 
      startSearch("", false, null, false); 
    break; 
    } 
    return true; 
} 

搜索菜单

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
<item 
    android:id="@+id/search" 
    android:actionViewClass="android.widget.SearchView" 
    android:showAsAction="ifRoom" 
    android:title="@string/search"/> 
</menu> 

检索XML

<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
    android:label="@string/search" 
    android:hint="@string/search" > 
</searchable> 

有了这个,我得到我的动作条搜索字段。但是,我在BrowseCategory活动中的onNewIntent没有通过按软键盘上的输入或搜索图标获得呼叫。有人可以帮助我解决这个问题吗?我在这里错过了什么?非常感谢!

+0

是否使用'SearchView'? – Gattsu 2014-09-30 06:51:38

+0

是的,在动作条 Android上搜索查看窗口小部件:actionViewClass =“android.widget.SearchView” – Keya 2014-09-30 06:56:31

+0

你基本上要接收的意图在同一个活动? – 2014-09-30 07:00:31

回答

3

搜索更多后,我发现了一个解决我的问题。

保持一切同我在上面贴出来,我刚刚更新了我的onCreateOptionsMenu(菜单菜单)方法中检索的活动(BrowseCategory在我的情况)的代码提供如下:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.search_filter, menu); 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
     SearchManager manager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
     SearchView search = (SearchView) menu.findItem(R.id.search).getActionView(); 
     search.setIconifiedByDefault(false); 
     search.setSearchableInfo(manager.getSearchableInfo(getComponentName())); 
     search.setOnQueryTextListener(new OnQueryTextListener() { 
      @Override 
      public boolean onQueryTextChange(String query) { 
       doSearch(query); 
       return true; 
      } 

      @Override 
      public boolean onQueryTextSubmit(String query) { 
       return false; 
      } 
     }); 
    } 
    return true; 
} 

OnQueryTextListener是关键在这里!添加此监听器会触发我的搜索,现在甚至可以在软键盘上调用onNewIntent时按“搜索”或“开始”。关于以后的问题,从回答的一个阅读Cannot get searchview in actionbar to work我相信设置权SearchableInfo到搜索查看是很重要的。现在触发onNewIntent。如果有人知道更多,请提供解释。我会更新,如果我也发现更多。

3

在BrowseCategory活动:

将此块添加

@Override 
protected void onNewIntent(Intent intent) { 
    if (ContactsContract.Intents.SEARCH_SUGGESTION_CLICKED.equals(intent.getAction())) { 
     //handles suggestion clicked query 
     String displayName = getDisplayNameForContact(intent); 
     resultText.setText(displayName); 
    } 
    //this else if is called when you will press Search Icon or Go (on soft keyboard) 
    else if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
     // handles a search query 
     String query = intent.getStringExtra(SearchManager.QUERY); 
     resultText.setText("should search for query: '" + query + "'..."); 
    } 
} 

之前点击

enter image description here

点击后

enter image description here

+0

感谢您的回复!我的Activity中覆盖了一个onNewIntent()方法。然而,意图本身没有得到收到。这是主要问题。我还应该做些什么才能让意图解雇? – Keya 2014-09-30 07:15:08

+0

尝试我建议的方式:),并显示你的'搜索。xml' @Keya – Gattsu 2014-09-30 07:17:29

+0

用searchable.xml内容更新了问题。 onNewIntent根本没有被调用。 – Keya 2014-09-30 07:25:25