Java 在Android中调用可搜索活动?

Java 在Android中调用可搜索活动?,java,android,searchable,Java,Android,Searchable,我正在为我的应用程序创建一个可搜索的活动 SearchableActivity.java package com.xxxx.xx; import java.util.ArrayList; import java.util.List; import android.app.ListActivity; import android.app.SearchManager; import android.content.Intent; import android.database.Cursor; i

我正在为我的应用程序创建一个可搜索的活动

SearchableActivity.java

package com.xxxx.xx;

import java.util.ArrayList;
import java.util.List;

import android.app.ListActivity;
import android.app.SearchManager;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;

import com.xxxx.xx;

public class SearchableActivity extends ListActivity {
protected SQLiteDatabase db;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.search);

    // Get the intent, verify the action and get the query
    Intent intent = getIntent();
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
      String query = intent.getStringExtra(SearchManager.QUERY);
      doMySearch(query);
    }
}




public List<String> doMySearch(String query) {
List<String> result = new ArrayList<String>();

Cursor c = db.query(
        "employee", 
        new String[] { "_id" }, // The column you want as a result of the Query
        "firstName like '%?%' OR lastName like '%?%' OR officePhone like '%?%'", // The where-Clause of the statement with placeholders (?)
        new String[] { query, query, query }, // One String for every Placeholder-? in the where-Clause
        null, // if you like a order by put it here
        null, // group by here
        null  // having here
        );
while (c.moveToNext()) {
    result.add(c.getString(0));
}
c.close();
return result;
}
}
包com.xxxx.xx;
导入java.util.ArrayList;
导入java.util.List;
导入android.app.ListActivity;
导入android.app.SearchManager;
导入android.content.Intent;
导入android.database.Cursor;
导入android.database.sqlite.SQLiteDatabase;
导入android.os.Bundle;
导入com.xxxx.xx;
公共类SearchableActivity扩展了ListActivity{
受保护的数据库数据库;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.search);
//获取意图、验证操作并获取查询
Intent=getIntent();
if(Intent.ACTION_SEARCH.equals(Intent.getAction())){
String query=intent.getStringExtra(SearchManager.query);
域搜索(查询);
}
}
公共列表域搜索(字符串查询){
列表结果=新建ArrayList();
游标c=db.query(
“雇员”,
新字符串[]{“\u id”},//作为查询结果所需的列
“类似于“%”的firstName或类似于“%”的lastName或类似于“%”的officePhone”,//带有占位符(?)的语句的where子句
新字符串[]{query,query,query},//where子句中的每个占位符-?对应一个字符串
null,//如果您想要订单,请将其放在此处
null,//按此处分组
空//这里有
);
while(c.moveToNext()){
添加(c.getString(0));
}
c、 close();
返回结果;
}
}
/res/xml/searchable.xml

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

xmlns:android=”http://schemas.android.com/apk/res/android"
android:label=“@string/app\u label”
android:hint=“@string/search\u hint”>
AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.xxxx.xx"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-permission android:name="android.permission.CALL_PHONE" />      
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <meta-data android:name="android.app.default_searchable"
                   android:value="com.xxxx.xx.SearchableActivity" />
        <activity android:name="com.xxxx.xx.TestList"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="com.xxxx.xx.SearchableActivity" >
        <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="com.xxxx.xx.TestDetails"></activity>
        <activity android:name="com.xxxx.xx.TestList">
            <meta-data android:name="android.app.default_searchable"
                       android:value="com.xxxx.xx.SearchableActivity" />
        </activity>
        <activity android:name="com.xxxx.xx.DirectReports"></activity>
    </application>
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="14"/>


我已经添加了所有这些,但是设备搜索按钮没有打开搜索对话框。为什么?

我不确定这一点,但可能是因为您将应用程序的包声明为
package=“com.xxxxxxx.tests”
,但在所有活动引用中都使用
samples.xxxxxxxxx.SearchableActivity
。尝试将您的应用程序包名称更新为
“samples.xxxxx”
,看看是否可以解决此问题。此外,在代码中,您的包声明为
package com.xxxx.xx。所以,下定决心,确保所有引用一致。

我不确定这一点,但可能是因为您将应用程序的包声明为
package=“com.xxxxxxx.tests”
,但在所有活动引用中都使用
samples.xxxxxxxx.SearchableActivity
。尝试将您的应用程序包名称更新为
“samples.xxxxx”
,看看是否可以解决此问题。此外,在代码中,您的包声明为
package com.xxxx.xx。所以,下定决心,使所有参考资料保持一致。

我无法找出该软件包的问题所在。我必须创建一个新的。现在一切都好了。谢谢。我不知道那个包裹出了什么问题。我必须创建一个新的。现在一切都好了。谢谢