我已经定义了SearchView
这样的
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater)
SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
SearchableInfo info = searchManager.getSearchableInfo(getActivity().getComponentName());
SearchView searchView = (SearchView) menu.findItem(R.id.action_menu_search).getActionView();
searchView.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
searchView.setSearchableInfo(info);
}
一切正常。当我提交查询时,会触发新的意图,并在我的MainActivity
中捕获它。但我不知道搜索查询的来源。
我可以看到mAppSearchData
变量可以帮助我android.widget.SearchView
,但由于某些原因无法访问它 - 代码searchView.setAppSearchData(bundle);
无法编译。
是否有其他方法可以传递其他数据来检测搜索的来源?
答案 0 :(得分:0)
您可以通过附加查询来发送包含查询的活动名称。让我们说你的查询是“你好”,你可以将它附加到像“mainactivity %% hello'”这样的东西上。在搜索活动中,您可以解析查询以检索活动名称。考虑此解决方案有一个解决方法。可能还有更好的东西。
答案 1 :(得分:0)
您可以实现自己的OnQueryTextListener,例如:
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
Intent intent = new Intent(getApplicationContext(), MyActivity.class);
intent.putExtra(MyActivity.IMPORTANT_NUMBER, importantNumber);
intent.putExtra(SearchManager.QUERY, s);
intent.setAction(Intent.ACTION_SEARCH);
startActivity(intent);
return true;
}
@Override
public boolean onQueryTextChange(String s) {
return false;
}
});
在onQueryTextSubmit中返回true非常重要,因此searchView不会执行默认操作。