我现在已经坚持了一段时间。 我已经查看了其他答案,但他们没有帮助我解决我的问题。
我的问题是onSearchRequested()不调用搜索对话框。 我无法弄清楚我的搜索是怎么回事……
相关代码如下……
表现
/res/xml/searchable.xml
我有strings.xml定义的字符串资源。
SearchableActivity类
public class SearchableActivity extends ListActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d("SEARCH", "HERE"); handleIntent(getIntent()); } public void onNewIntent(Intent intent) { setIntent(intent); handleIntent(intent); } public void onListItemClick(ListView l, View v, int position, long id) { // call the appropriate detail activity } private void handleIntent(Intent intent) { if (Intent.ACTION_SEARCH.equals(intent.getAction())) { String query = intent.getStringExtra(SearchManager.QUERY); doSearch(query); } } private void doSearch(String queryStr) { Toast.makeText(getApplicationContext(), queryStr, Toast.LENGTH_LONG).show(); } }
调用搜索的活动中的代码段…
@Override public boolean onOptionsItemSelected(MenuItem item) { if(item.getTitle().equals("Search")) { Toast.makeText(getApplicationContext(), "Search = "+onSearchRequested(), Toast.LENGTH_LONG).show(); return onSearchRequested(); } else { return false; } }
onSearchRequested()返回true 。 但是没有调用SearchableActivity 。 任何帮助表示赞赏。
非常感谢你。
更新
没关系! 我想到了!
解决方案是将meta-data移动到activity标记之外和application标记内。 已添加以下作为遇到此问题的人的答案。
谢谢。
搞定了。
解决方案是将meta-data移动到activity标记之外和application标记内,如下所示……
谢谢!
除非您希望应用程序中的每个活动都提供搜索对话框,否则您不必将元数据移动到活动标记之外。 它可能不适合您的原因是因为您将元数据放入错误的活动并将其移到外面解决了问题。
不要将ResearchActivity与调用它的Activity混淆如下:
它没有错误,但不起作用。 工作范例:
MainActivity是提供搜索对话框的活动(它也可以是搜索小部件 ), SearchableActivity是在用户请求搜索和onSearchRequested()被调用后开始的活动。
您需要声明搜索活动的完整路径
UPDATE
你必须override onNewIntent()
将清单改为