【发布时间】:2016-09-29 14:10:45
【问题描述】:
单击搜索结果时,我想在搜索活动的父级上调用一个函数。我怎样才能做到这一点? (我可以将父项的引用传递给接口的搜索活动吗?或者是否有可能启动搜索活动以获得结果?或者是否可以在父活动中启动搜索?)
...
<activity
android:name=".MainActivity"
android:configChanges="keyboardHidden|orientation|screenSize|screenLayout"
android:keepScreenOn="true"
android:theme="@style/AppTheme.NoActionBar">
<meta-data
android:name="android.app.default_searchable"
android:value=".search.SearchAllActivity"/>
<intent-filter>
<action android:name="android.intent.action.SEARCH"/>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data
...
</intent-filter>
</activity>
...
<activity
android:name=".search.SearchAllActivity"
android:label="@string/title_search"
android:theme="@style/AppTheme">
<intent-filter>
<action android:name="android.intent.action.SEARCH"/>
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable"/>
</activity>
MainActivity 触发搜索。搜索完成,结果显示在 SearchAllActivity 中。
编辑: 一个明显的解决方案(对我来说很明显)是设置 setOnQueryTextListener 并手动开始搜索:
mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
Intent intent = new Intent().setClass(mContext, SearchAllActivity.class);
intent.putExtra("query", mSearchView.getQuery());
startActivityForResult(intent, 42);
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
});
在 SearchAllActivity 中:
private void handleIntent(Intent intent) {
String query = intent.getCharSequenceExtra("query").toString();
SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this, suggestionProvider.AUTHORITY, suggestionProvider.MODE);
suggestions.saveRecentQuery(query, null);
runSearch(query);
}
@Override
protected void onNewIntent(Intent intent) {
setIntent(intent);
handleIntent(intent);
}
但是现在建议提供者不起作用
【问题讨论】:
标签: android search android-activity