【发布时间】:2015-08-09 12:26:47
【问题描述】:
我有一个带有搜索视图的操作栏,我有一个带有选项菜单的片段集。在我的 MainActivity SearchView 工作正常,但在我的 Fragment (我需要处理事件 OptionMenuItem 做某事), setHasOptionMenu 然后 SearchView 不能工作。这是我的代码
MainActivity 中的选项菜单
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
// Create SearchView
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setSubmitButtonEnabled(false);
searchView.setQueryHint("Search Here");
searchView.setSearchableInfo(searchManager
.getSearchableInfo(getComponentName()));
SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
return false;
}
@Override
public boolean onQueryTextChange(String s) {
if(s.length() > 0){
Tab1.listadaptor.getFilter().filter(s);
Tab2.listadaptor.getFilter().filter(s);
}else{
pager.setAdapter(adapter);
if(SlidingTabLayout.userState){
pager.setCurrentItem(0);
}else{
pager.setCurrentItem(1);
}
}
return true;
}
};
searchView.setOnQueryTextListener(queryTextListener);
return super.onCreateOptionsMenu(menu);
}
片段中的OptionMenuItem
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
//Do Something
}
return super.onOptionsItemSelected(item);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setHasOptionsMenu(true);
}
【问题讨论】:
-
你能检查一下吗? stackoverflow.com/questions/31489109/…,我也给出了答案
-
感谢@HirenPatel 的回答,但我的问题不是那样的。我需要在 MainActivity 中使用 searchView,而不是在 Fragment 中重新创建,因为我的“寻呼机”和“适配器”无法在 Fragment 中调用。我不重新创建 actionBar,我只 setHasOptionMenu 并使用 onOptionsItemSelected。我不知道为什么我的所有选项项目都可以正常工作,但只有我的 SearchView 不能接受输入。我尝试将日志消息放入 SearchView 的代码中,当我单击 SearchView 图标时它会返回消息(不接受输入)。也许错误是我的“寻呼机”和“适配器”。我认为它不能在 Fragment 中调用,但现在我不知道我会做什么
标签: android android-fragments android-actionbar searchview