3

我完全被困住了,花了几个小时阅读可能的解决方案。根本无法启动我的搜索活动。

我有一个主要活动,我希望搜索按钮从中开始搜索活动:

文件MainApp.java

public class MainApp extends Activity {
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.mainapplayout);
    }
    public boolean onCreateOptionsMenu(Menu m){
      getMenuInflater().inflate(R.menu.mainappmenu,m);
      return true;
    }
    public boolean onOptionsItemSelected(MenuItem m) {
      if(m.getItemId()==R.id.menu_search){
        return onSearchRequested(); // THIS IS CALLED, AND RETURNS TRUE
      }else return false;
    }
}

按下 UI 按钮和硬件搜索键都不会调用搜索。 onSearchRequested()肯定被调用,并返回true.

文件AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest package="org.homphysiology.lists"
 android:versionCode="1" android:versionName="1.0"  
 xmlns:android="http://schemas.android.com/apk/res/android">
<uses-sdk android:minSdkVersion="8" />
<application 
             android:name="org.homphysiology.lists.MainApp"
                  ****REMOVED THIS LINE NOW, thanks arju, still not working tho
             android:icon="@drawable/ic_launcher">
    <activity android:name="org.homphysiology.lists.MainApp">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <meta-data
            android:name="android.app.default_searchable"
            android:value="org.homphysiology.lists.SearchActivity"
        />
    </activity>
    <activity android:name="org.homphysiology.lists.SearchActivity">
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
            <category android:name="android.intent.category.DEFAULT" />
                 ****REMOVED THIS LINE NOW, thanks tushar, still not working tho
        </intent-filter>
        <meta-data
            android:name="android.app.searchable"
            android:resource="@xml/searchable"
        />
    </activity>
</application>
</manifest>

我有以下内容:

文件res/xml/searchable.xml

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schamas.android.com/apk/res/android"
  android:label="@string/search_label"
  android:hint="@string/search_hint"
/>

这些字符串在/res/values/strings.xml.

搜索活动本身很简单,但从未创建- 我在构造函数中有一个断点:

文件SearchActivity.java

public class SearchActivity extends ListActivity {
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // setListAdapter(...)
  }
}

任何人都可以在这里发现任何问题吗?[在 eclipse Juno 4.2.1 中编译,SDK 21.0.1,在 HTC 渴望 Z 上测试] 谢谢...


附录

((SearchManager)getSystemService(Context.SEARCH_SERVICE))
  .getSearchableInfo(getComponentName())

返回null。也许这只是在强调我SearchActivity没有正确注册的事实......


修改@arju 的建议:我可以使用“手动”启动搜索活动

boolean onOptionsItemSelected(MenuItem m){
   startActivity(new Intent(this,SearchActivity.class));  
   return true;
}

但当然,这不适用于硬件按钮,而且它不会显示系统搜索对话框。


我还尝试为整个应用程序设置搜索元数据,而不是主要活动:

<manifest>
  <application>
     <activity ...MainApp...        >  ...  </activity>
     <activity ...SearchActivity... >  ...  </activity>
     <meta-data
         android:name="android.app.default_searchable"
         android:value="org.homphysiology.lists.SearchActivity"
     />
  </application>
</manifest>

同样的问题!搜索活动永远不会被实例化。

4

2 回答 2

1

Android 文档说:

注意:<intent-filter> 不需要带有 DEFAULT 值的 <category>(您通常在 <activity> 元素中看到),因为系统使用其组件名称将 ACTION_SEARCH 意图显式传递给您的可搜索活动。

编辑:

是这样的:

<searchable xmlns:android="http://schamas.android.com/apk/res/android"

应该:

<searchable xmlns:android="http://schemas.android.com/apk/res/android"

注意schamasschemas:)

于 2013-03-24T10:24:29.393 回答
1

Try this

Intent i=new Intent("android.intent.action.SEARCH");

startActivity(i);

于 2013-03-24T09:54:49.200 回答