私の主なアクティビティは、検索を呼び出して検索結果を表示する必要があります。onSearchRequested() が呼び出されたとき、検索ダイアログは表示されません。
同様の質問を見つけて、すべての詳細を追跡しました(と思います)が、どうやら他に何か問題があるようです。これが私の実装の抜粋です。
AndroidManifest.xml の一部
<application
android:label="@string/AppName"
android:launchMode="singleTop"
... >
<meta-data
android:name="android.app.default_searchable"
android:value=".main.MainActivity" />
<activity
android:name=".main.MainActivity"
android:launchMode="singleTop"
... >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/deep_search" />
</activity>
...
</application>
deep_search.xml
<?xml version="1.0" encoding="utf-8"?>
<Searchable
xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/AppName"
android:hint="@string/search_deep_hint" >
</Searchable>
MainActivity のパーツ:
public class MainActivity extends Activity implements ...
{
@Override
protected void onNewIntent (Intent intent)
{
setIntent(intent);
if (Intent.ACTION_SEARCH.equals(intent.getAction()))
{
String query = intent.getStringExtra (SearchManager.QUERY);
// Do work using string
}
}
@Override
public boolean onOptionsItemSelected (MenuItem item)
{
int selectedId = item.getItemId();
switch (selectedId)
{
case ...:
case R.id.menu_search_deep:
boolean launched = onSearchRequested();
logI ("home page deep searched launched: " + launched); // log shows we got here
}
return true;
}
...
}