我正在尝试使用ActionBarSherlock的搜索视图在List中创建一个过滤器.我目前的代码如下:
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
getSupportMenuInflater().inflate(R.menu.building_search, menu);
SearchView searchView = new SearchView(getSupportActionBar().getThemedContext());
SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener()
{
public boolean onQueryTextChange(String newText)
{
// this is your adapter that will be filtered
listAdapter.getFilter().filter(newText);
return true;
}
public boolean onQueryTextSubmit(String query)
{
// this is your adapter that will be filtered
listAdapter.getFilter().filter(query);
return true;
}
};
searchView.setOnQueryTextListener(queryTextListener);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.search:
onSearchRequested();
return true;
}
return super.onOptionsItemSelected(item);
} …Run Code Online (Sandbox Code Playgroud) 任何人都可以看到为什么这不起作用..
我的SearchView位于ActionBar中并始终显示.我想知道用户何时按下搜索视图...而不是当它扩展或获得焦点时.
此代码位于onCreateOptionsMenu中
SearchView = _searchView;
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
_searchView = (SearchView) menu.findItem(R.id.menu_finder_text_search).getActionView();
_searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
_searchView.setIconifiedByDefault(false); // Do not iconify the widget, we want to keep it open!
_searchView.setFocusable(false);
_searchView.setClickable(true);
_searchView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//DO SOMETHING!
}
});
Run Code Online (Sandbox Code Playgroud)
任何人?
当用户在搜索小部件中提交应用程序范围内的搜索时ActionBar,我希望它在提交后自动折叠.提交基本上打开了SearchableActivity.目前,如果他们关闭搜索结果activity(SearchableActivity),则搜索窗口小部件仍处于打开状态.我只是希望它关闭; 没有文字.
从阅读中,我似乎认为答案就是这样
`searchView.onActionViewCollapsed() ;'
Run Code Online (Sandbox Code Playgroud)
但是,我不知道该把它放在哪里?
这是我的代码:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getSupportMenuInflater();
inflater.inflate(R.menu.menu, menu);
MenuItem searchItem = menu.findItem(R.id.menu_search);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
SearchView searchView = (SearchView) searchItem.getActionView();
searchView.setSearchableInfo(searchManager
.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(true);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
setupNewSearchView(searchItem, searchManager);
}
return true;
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private void setupNewSearchView(final MenuItem searchItem,
SearchManager searchManager) {
android.widget.SearchView searchView = (android.widget.SearchView) searchItem
.getActionView();
searchView.setSearchableInfo(searchManager
.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(true);
}
@Override …Run Code Online (Sandbox Code Playgroud)
附件是搜索视图实施的屏幕截图,其中listview活动成功运行.但是,在搜索视图上的任何文本搜索中,它会显示灰色吐司般的功能,显示用户输入的内容以过滤列表.如何删除它,因为它阻止我的列表视图显示在后台?
我有一个SearchView的片段在ActionBar.问题是当我第一次触摸图标时它向左移动(扩展SearchView).然后我必须再次触摸它以获取文本字段.下面的图片将澄清更多.
requestFocusFromTouch();
requestFocus();
setIconifiedByDeafault(false);
setIconified(); //Works but opens keypad even before touching searchview
Run Code Online (Sandbox Code Playgroud)
片段的onPrepareOptionsMenu()和onCreateOptionsMenu():
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.menu_search, menu);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
SearchView searchView = (SearchView)menu.findItem(R.id.search).getActionView();
searchView.setIconified(false);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
mAdapter.getFilter().filter(newText);
return false;
}
});
}
Run Code Online (Sandbox Code Playgroud)
menu_search.xml
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
<item …Run Code Online (Sandbox Code Playgroud) 我有一个搜索视图,其中包含由MatrixCursor填充的建议(因为我已经有一个字符串数组).但是我想知道用户正在选择哪个项目.到目前为止,我只能获得用户点击建议列表的位置:
searchView.setOnSuggestionListener(new SearchView.OnSuggestionListener() {
@Override
public boolean onSuggestionClick(int position) {
String selectedItem = (String)mAdapter.getItem(position);
Log.e("search view", selectedItem);
return true;
}
Run Code Online (Sandbox Code Playgroud)
但是我有一个错误:android.database.MatrixCursor无法转换为java.lang.String,我不知道如何解决它.非常感谢任何帮助.
android android-arrayadapter simplecursoradapter matrixcursor searchview
根据官方文档,有两种方法可以提供搜索界面:使用搜索对话框或SearchView小部件.我想注意使用这两种方式传递搜索上下文数据.
所以,文档说:
..您可以提供系统发送给您的可搜索活动的意图中的其他数据.您可以传递APP_DATA包中的附加数据,该包含在ACTION_SEARCH目的中.
要将此类数据传递给可搜索的活动,请覆盖用户可以执行搜索的活动的onSearchRequested()方法,使用其他数据创建Bundle,并调用startSearch()以激活搜索对话框.例如:
Run Code Online (Sandbox Code Playgroud)@Override public boolean onSearchRequested() { Bundle appData = new Bundle(); appData.putBoolean(SearchableActivity.JARGON, true); startSearch(null, false, appData, false); return true; }..一旦用户提交查询,它就会与您添加的数据一起发送到您的可搜索活动.您可以从APP_DATA Bundle中提取额外数据以优化搜索.例如:
Run Code Online (Sandbox Code Playgroud)Bundle appData = getIntent().getBundleExtra(SearchManager.APP_DATA); if (appData != null) { boolean jargon = appData.getBoolean(SearchableActivity.JARGON); }
这是指搜索对话框.那么搜索小部件呢?
是否可以SearchView仅使用小部件传递搜索上下文数据?
希望,有人可以给出明确的解释和/或建议另一种或类似的方式来实现目标.
谢谢!
android android-intent android-searchmanager searchview search-dialog
我的工具栏上有一个SearchView,我想更改默认后退按钮的图标。
这是我的工具栏:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/my_awesome_toolbar"
android:layout_width="fill_parent"
android:layout_height="?android:attr/actionBarSize"
app:titleTextColor="@android:color/black"
android:elevation="5dp">
</android.support.v7.widget.Toolbar>
Run Code Online (Sandbox Code Playgroud)
这是我的SearchView的布局:
<?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">
<item android:id="@+id/search"
android:title="@string/search"
app:icon="@drawable/ic_search_black_24dp"
android:icon="@drawable/ic_search_black_24dp"
app:showAsAction="always|collapseActionView"
android:maxWidth="50dp"
app:actionViewClass="android.support.v7.widget.SearchView"/>
</menu>
Run Code Online (Sandbox Code Playgroud)
这就是我在活动中创建选项菜单的方式:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_search_team, menu);
SearchManager searchManager = (SearchManager)
getSystemService(Context.SEARCH_SERVICE);
searchMenuItem = menu.findItem(R.id.search);
searchView = (SearchView) searchMenuItem.getActionView();
ImageView searchClose = (ImageView) searchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn);
searchClose.setImageResource(R.drawable.ic_action_cancel_black);
searchClose.setVisibility(View.VISIBLE);
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) searchClose.getLayoutParams();
params.gravity = Gravity.RIGHT;
searchClose.setLayoutParams(params);
searchClose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Clear query
searchView.setQuery("", false); …Run Code Online (Sandbox Code Playgroud) 我Toolbar在后面的按钮和左边之间的左边有一个很大的空白区域SearchView.我的xml文件看起来像这样
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_scrollFlags="scroll|enterAlways"
android:contentInsetStart="0dp"
app:contentInsetStart="0dp">
<android.support.v7.widget.SearchView
android:id="@+id/search_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</android.support.v7.widget.Toolbar>
Run Code Online (Sandbox Code Playgroud)
在我的Activity我添加一个后面的按钮如下
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Run Code Online (Sandbox Code Playgroud)
如果我把它设置为假它可以正常工作.但我需要一个后退按钮.有办法解决吗?谢谢.
我没用过menu layout.
TypeText似乎不适用于SearchView。
onView(withId(R.id.yt_search_box))
.perform(typeText("how is the weather?"));
Run Code Online (Sandbox Code Playgroud)
给出错误:
在视图“ ID为:../ yt_search_box”的视图中执行“键入文本(天气如何?)”时出错
android ×10
searchview ×10
click ×1
fragment ×1
matrixcursor ×1
search ×1
toolbar ×1
type-hinting ×1