Android 打开“快速搜索建议”框
打开搜索字段时,搜索建议框未打开。只要搜索字段为空,它就会保持关闭状态。当我开始输入时,搜索建议框才会打开。 当我公开搜索字段时,如何不小心地打开搜索建议框 YouTube示例: 例如,对于列表Android 打开“快速搜索建议”框,android,search,drop-down-menu,search-box,Android,Search,Drop Down Menu,Search Box,打开搜索字段时,搜索建议框未打开。只要搜索字段为空,它就会保持关闭状态。当我开始输入时,搜索建议框才会打开。 当我公开搜索字段时,如何不小心地打开搜索建议框 YouTube示例: 例如,对于列表项: searchView.setSuggestionsAdapter(new SearchableCursorAdapter(this, getCursorByQuery(items, ""), items)); /** * CursorAdapter with the search able l
searchView.setSuggestionsAdapter(new SearchableCursorAdapter(this, getCursorByQuery(items, ""), items));
/**
* CursorAdapter with the search able list
* compiler bug in javac 1.5.0_07-164, we need to implement Filter able to make compilation work
*/
public class SearchableCursorAdapter extends CursorAdapter implements Filterable {
List<String> mItems;
public SearchableCursorAdapter(Context context, Cursor cursor, List<String> items) {
super(context, cursor);
mItems = items;
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.searchable_item, parent, false);
TextView textView = (TextView) view.findViewById(R.id.searchable_optianl_text_view);
textView.setText(cursor.getString(COLUMN_DISPLAY_NAME));
return view;
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
TextView textView = (TextView) view.findViewById(R.id.searchable_optianl_text_view);
textView.setText(cursor.getString(COLUMN_DISPLAY_NAME));
}
@Override
public String convertToString(Cursor cursor) {
return cursor.getString(COLUMN_DISPLAY_NAME);
}
@Override
public Cursor runQueryOnBackgroundThread(CharSequence constraint) {
FilterQueryProvider filter = getFilterQueryProvider();
if (filter != null) {
return filter.runQuery(constraint);
}
return getCursorByQuery(mItems, (String)constraint);
}
private static final int COLUMN_DISPLAY_NAME = 1;
}
/**
* create a cursor with the list to display
*/
Cursor getCursorByQuery(List<String> fullItems, String constraint) {
List<String> items = new ArrayList<String>();
for (String item : fullItems) {
if (item.toLowerCase(Locale.US).startsWith(((String) constraint).toLowerCase(Locale.US))) {
items.add(item);
}
}
// Load data from list to cursor
String[] columns = new String[] { "_id", "text" };
Object[] temp = new Object[] { 0, "default" };
MatrixCursor cursor = new MatrixCursor(columns);
for(int i = 0; i < items.size(); i++) {
temp[0] = i;
temp[1] = items.get(i);
cursor.addRow(temp);
}
return cursor;
}
searchView.setSuggestionAdapter(新的SearchableCursorAdapter(这个,getCursorByQuery(items,”),items));
/**
*CursorAdapter与可搜索列表
*JavaC1.5.0_07-164中的编译器错误,我们需要实现能够使编译工作的过滤器
*/
公共类SearchableCursorAdapter扩展了CursorAdapter实现了Filterable{
列出螨类;
公共SearchableCursorAdapter(上下文上下文、光标、列表项){
超级(上下文、游标);
mItems=项目;
}
@凌驾
公共视图newView(上下文上下文、光标、视图组父对象){
LayoutFlater充气机=LayoutFlater.from(上下文);
视图=充气机。充气(R.layout.searchable_项,父项,false);
TextView TextView=(TextView)view.findViewById(R.id.searchable_optianl_text_view);
textView.setText(cursor.getString(COLUMN_DISPLAY_NAME));
返回视图;
}
@凌驾
公共void bindView(视图、上下文上下文、光标){
TextView TextView=(TextView)view.findViewById(R.id.searchable_optianl_text_view);
textView.setText(cursor.getString(COLUMN_DISPLAY_NAME));
}
@凌驾
公共字符串convertToString(游标){
返回cursor.getString(列显示名称);
}
@凌驾
公共游标runQueryOnBackgroundThread(CharSequence约束){
FilterQueryProvider筛选器=getFilterQueryProvider();
if(过滤器!=null){
返回filter.runQuery(约束);
}
返回getCursorByQuery(mItems,(String)约束);
}
私有静态最终整型列显示名称=1;
}
/**
*使用要显示的列表创建光标
*/
游标getCursorByQuery(列出完整项,字符串约束){
列表项=新建ArrayList();
用于(字符串项:fullItems){
if(item.toLowerCase(Locale.US).startsWith(((字符串)约束).toLowerCase(Locale.US))){
项目。添加(项目);
}
}
//将数据从列表加载到光标
字符串[]列=新字符串[]{“\u id”,“text”};
对象[]临时=新对象[]{0,“默认值”};
MatrixCursor=新的MatrixCursor(列);
对于(int i=0;i
别忘了在AndroidMenifest上:
<!-- enable the search dialog to send searches to SearchableActivity -->
<meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/>
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
searchable.xml
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/search_hint"
android:hint="@string/search_label">
</searchable>
menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_search"
android:title="@string/Search"
android:icon="@drawable/ic_action_search"
android:showAsAction="always"
android:actionViewClass="android.widget.SearchView" />
</menu>
在它打开之前,你想从哪里开始键入?我不会像YouTube那样显示一个弹出窗口,这是一些可选的结果
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_search"
android:title="@string/Search"
android:icon="@drawable/ic_action_search"
android:showAsAction="always"
android:actionViewClass="android.widget.SearchView" />
</menu>