我正在尝试在我的应用程序中实现搜索。
我的应用程序包含4个活动,我想只在其中3个上添加搜索对话框,而其中只有一个(ProductsActivity)将是默认上下文。
不幸的是,当我激活搜索时,我不断收到以下错误: “关键android.app.default_searchable期望String但值是java.lang.Integer。返回默认值。”
<activity android:label="@string/app_name" class=".AppEntry" android:name=".AppEntry">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".category.CategoriesListActivity">
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/>
</activity>
<activity android:name=".product.ProductsActivity">
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data android:name="android.app.default_searchable" android:resource="@xml/searchable"/>
</activity>
知道为什么吗?
由于
答案 0 :(得分:3)
对于默认的可搜索活动,您必须将元数据标记放在应用程序标记下。
<application ... >
<meta-data android:name="android.app.default_searchable"
android:value=".DefaultSearchActivity"/>
<activity android:name=".ProductActivity" >
...
<meta-data android:name="android.app.default_searchable"
android:value=".SearchActivityForProducts"/>
</activity>
...
在该示例中,默认应用程序搜索将在 DefaultSearchActivity 上完成,而在 ProductActivity 中,搜索将在 SearchActivityForProducts 上进行。希望它可以帮到某人。
答案 1 :(得分:2)
不应该是
<meta-data android:name="android.app.default_searchable"
android:value=".product.ProductsActivity"/>
而不是再次传递@xml引用。
答案 2 :(得分:0)
有一件非常重要的事情是按照Android准则说明http://developer.android.com/guide/topics/manifest/activity-element.html#nm
正确命名您的活动android:name实现活动的类的名称,a Activity的子类。属性值应该是完全限定的 类名(例如“com.example.project.ExtracurricularActivity”)。 但是,作为简写,如果名称的第一个字符是a 句号(例如“.ExtracurricularActivity”),附加到 元素中指定的包名称。一旦发布 你的申请,你不应该改变这个名称(除非你设置 机器人:导出= “假”)
没有默认值。必须指定名称。
如果您未将DOT放入活动名称,则搜索操作仅适用于您声明为“default_searchable”的活动。这个小DOT花了我们几个小时所以要小心!