我已在操作栏中使用SearchManager和SearchView实现了搜索功能。显示搜索视图的相同活动将执行搜索并显示搜索结果。这工作正常,我可以从onNewIntent()获得搜索查询而没有问题。
当用户点击后退按钮退出搜索模式时,我需要重新显示所有项目。我该如何做到这一点?我试图拦截搜索管理器的OnDismiss和OnCancel以及搜索视图的OnClose。什么都没有被称为。代码如下:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager =
(SearchManager) this.getSystemService(Context.SEARCH_SERVICE);
SearchView searchView =
(SearchView) menu.findItem(R.id.search).getActionView();
searchView.setSearchableInfo(
searchManager.getSearchableInfo(getComponentName()));
//Try to detect end of search session. None of the listeners getting called.
searchManager.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel() {//...}
});
searchManager.setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss() {//...}
});
searchView.setOnCloseListener(new OnCloseListener() {
@Override
public boolean onClose() {
return false;
}
});
return true;
}
活动的清单文件条目如下:
<activity
android:name="com.example.MainActivity"
android:label="@string/app_name"
android:launchMode="singleTop">
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
答案 0 :(得分:2)
我遇到了同样的问题,我发现解决方案非常简单。如果您使用searchWidget(像我一样),您只需要这样做:
searchView.setOnCloseListener(new SearchView.OnCloseListener() {
@Override
public boolean onClose() {
// Put your code here to clear and display the results
return false;
}
});
因为实际上用户正在关闭的是SearchView,而不是SearchManager。我只是测试它,它就像一个魅力!
希望这适合你。
此致