在android活动中搜索

时间:2013-10-17 08:54:53

标签: android android-activity android-search

我是Android新手,我正在使用搜索相关功能。阅读完本教程后,我有一些问题:

1应用程序中的SearchableActivity是唯一的吗?

设置搜索功能似乎需要3个步骤(来自android开发者指南):

1)创建SearchableActivity以接收搜索关键字。

2)让SearchableActivity接受ACTION_SEARCH意图

3)在元素中指定要使用的可搜索配置。

然后我想知道是否所有与搜索相关的工作都会委托给SearchableActivity

假设我有两个MainActivityMainActivityTwo,它们都会在操作栏中生成SearchView

AndroidMinefset.xml:

    <activity android:name="com.app.activity.MainActivityTwo" />
    <activity android:name="com.app.activity.MainActivity" />
    <activity android:name="com.app.activity.SearchableActivity"
                android:launchMode="singleTop" >
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
        <meta-data
            android:name="android.app.searchable"
            android:resource="@xml/searchable" />
    </activity>

XML / search.xml:

<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:hint="@string/search_hint"
    android:label="@string/app_name" >
</searchable>

将搜索配置(serchableInfo)注册到SerchView

.MainActivity

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.u_action_menu_map, menu);

    MenuItem searchItem = menu.findItem(R.id.action_search);
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);

    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));  
    return super.onCreateOptionsMenu(menu);
}

这不起作用,似乎没有与当前活动(MainActivity)绑定的serchableInfo。

即使我改变了这个:

searchView.setSearchableInfo(searchManager.getSearchableInfo(new ComponentName("com.app.activity", "SearchableActivity")));

它仍然无法找到searchableInfo。

将搜索相关配置添加到MainActivity后:

<activity android:name="com.app.activity.MainActivityTwo" />
<activity android:name="com.app.activity.SearchableActivity" />
<activity android:name="com.app.activity.MainActivity"
            android:launchMode="singleTop" >
    <intent-filter>
        <action android:name="android.intent.action.SEARCH" />
    </intent-filter>
    <meta-data
        android:name="android.app.searchable"
        android:resource="@xml/searchable" />
</activity>

这很有用。 WTF。

我一直认为Activity提供的搜索UI和Activity句柄的输入是不同的,但是经过我的测试后看来它们是同一个Activity,也就是说用户输入都是提交给Activity本身的,但为什么要使用**意图传输输入数据?

2搜索提交

“搜索”对话框的对话框右侧有一个搜索提交按钮:

enter image description here

SearchView内部没有任何内容,以便如何在SearchView中提交搜索内容:

enter image description here

1 个答案:

答案 0 :(得分:1)

键盘上应该有一个search键。它也可以是goreturn或类似的键,应该开始搜索。

enter image description here