从可搜索的活动中搜索Android

时间:2011-04-13 08:21:45

标签: android search

我有一个包含列表的活动。通过Android onSearchRequested()我实现了搜索。 结果显示为另一个Activity中具有相同适配器的列表。到目前为止工作正常。

此外,我希望能够从第二个活动中搜索,在同一个列表中显示新结果。

我的AndroidManifest.xml用于这两项活动:

<activity android:name=".ListActivity" android:label="List">
    <meta-data android:name="android.app.default_searchable" android:value=".SearchActivity" />
</activity>

<activity android:name=".SearchActivity" android:label="Results">
    <intent-filter>
        <action android:name="android.intent.action.SEARCH" />
    </intent-filter>
    <meta-data android:name="android.app.searchable" android:resource="@xml/search" android:value=".SearchActivity" />
</activity>

SearchActivity's onResume():

@Override
protected void onResume() {
    super.onResume();
    Intent queryIntent = getIntent();
    String value = queryIntent.getStringExtra(SearchManager.QUERY);
    setView(value);
}

setView()方法通过所有对象执行foreach循环,将它们添加到结果数组中,该结果数组用于列表显示的新适配器。

ca = new CustomAdapter(this, R.layout.customadapter, resultArray);
list.setAdapter(pa);
list.invalidate();

当尝试从第二个Activity搜索时,搜索栏出现,我可以输入我的搜索值,发送它 - 但列表不会改变(甚至键盘都会保留)。 有什么遗漏?

编辑:试图让它更容易理解。

1 个答案:

答案 0 :(得分:4)

找到了that question,它描述了同样的问题。

我必须覆盖onNewIntent()

,而不是覆盖onResume()
@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);      
    String value = intent.getStringExtra(SearchManager.QUERY);
    setView(value);
}