我有一个ActionBar的活动。其中一个选项是搜索文档(不一定是本地)。我想用一个上下文操作栏(CAB)与下列项目:如何在上下文操作栏中创建“搜索”字段?
- 编辑字段 - 地方,用户可以输入要搜索的
- 上一页按钮文本 - 移动到匹配的上一个项目搜索
- 下一个按钮 - 移动到匹配搜索
我想用一个CAB有以下几个原因的下一个项目。主要是,我希望用户选择一个可以调出上面定义的CAB的选项。当用户完成搜索时,他们选择完成按钮,并且ActionBar返回到之前的状态。
这是问题所在。我无法让搜索项以扩展状态出现在我的CAB中。注:我试图修改的活动不是主要活动,而是用户基于某些事件启动的活动。加载此活动后,用户可能决定或不会决定使用我所描述的“搜索”功能。我也不希望Android进行搜索。我有一个API将搜索我想要的结果,并允许我导航到prev/next搜索结果。
我对CAB(这是正确调用)的代码是:
protected ActionMode mActionModeSearch;
private ActionMode.Callback mActionModeSearchCallback = new ActionMode.Callback()
{
@Override
public boolean onCreateActionMode(ActionMode actionMode, Menu menu)
{
actionMode.getMenuInflater().inflate(R.menu.pdf_menu_search, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.pdf_menu_search_item).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener()
{
@Override
public boolean onQueryTextSubmit(String s)
{
return false;
}
@Override
public boolean onQueryTextChange(String s)
{
return false;
}
});
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode actionMode, Menu menu)
{
return false;
}
@Override
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem)
{
switch(menuItem.getItemId())
{
case R.id.pdf_menu_search_prev:
findPrevSearchResult();
return true;
case R.id.pdf_menu_search_next:
findNextSearchResult();
return true;
default:
return false;
}
}
@Override
public void onDestroyActionMode(ActionMode actionMode)
{
//resetHideToolbarsTimer();
}
};
的CAB菜单代码:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<group android:id="@+id/group_search_mode">
<item
android:id="@+id/pdf_menu_search_item"
android:title="@string/search"
android:icon="@drawable/ic_pdf_action_search"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="android.support.v7.widget.SearchView"/>
<item
android:id="@+id/pdf_menu_search_prev"
android:title="@string/search_prev"
android:icon="@drawable/ic_pdf_action_search_prev"
app:showAsAction="ifRoom" />
<item
android:id="@+id/pdf_menu_search_next"
android:title="@string/search_next"
android:icon="@drawable/ic_pdf_action_search_next"
app:showAsAction="ifRoom" />
</group>
我也改变了我的活动定义AndroidManifest .xml虽然我不确定这是必需的:
<activity
android:name="com.myapp.myActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.app.default_searchable"
android:value="com.myapp.myActivity" />
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
当我运行该应用程序时,该活动正确加载。当用户选择搜索选项时,我加载CAB,它似乎运行良好。我已经通过代码来确保onCreateActionMode按预期运行。但是,我看到的只是搜索的图标,下一个和上一个,用'完成'按钮。当我触摸“搜索”图标时,它不会执行任何操作。在CAB中没有创建文本字段供我输入文本。我究竟做错了什么????
屏幕截图显示CAB即将推出。正如你所看到的,当我按下它时,搜索图标会显示但不会做任何事情。我真正需要的是搜索编辑框默认显示。
真棒!我尝试了几乎所有的答案,但总是错过了一件事。你把它放在一起。谢谢!!!! – JustLearningAgain 2014-10-21 15:11:05
这不低于4.0。 – Colateral 2016-11-10 21:38:25