带有自定义建议适配器的Android SearchView
我有一个带有SimpleCursorAdapter的SearchView,它可以查询来自SQLite数据库的建议。查询工作正常,SearchView会弹出一个包含建议的列表。然而,这些建议并不明显。例如,如果有两个建议,可以看到有两个列表条目,但不显示文本。SearchView包含在DialogFragment中 这是光标适配器和搜索视图的初始化:带有自定义建议适配器的Android SearchView,android,sqlite,searchview,Android,Sqlite,Searchview,我有一个带有SimpleCursorAdapter的SearchView,它可以查询来自SQLite数据库的建议。查询工作正常,SearchView会弹出一个包含建议的列表。然而,这些建议并不明显。例如,如果有两个建议,可以看到有两个列表条目,但不显示文本。SearchView包含在DialogFragment中 这是光标适配器和搜索视图的初始化: suggestionAdapter = new SimpleCursorAdapter(getActivity(), and
suggestionAdapter = new SimpleCursorAdapter(getActivity(),
android.R.layout.simple_list_item_1,
null,
new String[]{"name"},
new int[]{android.R.layout.simple_list_item_1},
0);
final SearchView searchProd = (SearchView) dialogView.findViewById(R.id.searchProd);
searchProd.setOnQueryTextListener(this);
searchProd.setOnSuggestionListener(this);
searchProd.setSuggestionsAdapter(suggestionAdapter);
搜索建议在onQueryTextChanged中生成,其中新光标将生成并注入SuggestionAdapter:
@Override
public boolean onQueryTextChange(String newText) {
String[] columns = new String[]{"_id", "name"};
String selection = "name LIKE ?";
String[] selectionArgs = new String[]{newText + "%"};
Cursor c = db.query(TABLE_NAME,
columns,
selection,
selectionArgs,
null,
null,
null);
if (c.getCount() > 0) {
suggestionAdapter.changeCursor(c);
suggestionAdapter.notifyDataSetChanged();
return true;
} else {
return false;
}
}
问题是适配器将显示具有列名的数据,如SUGGEST\u column\u TEXT\u 1。这是“搜索”下拉框中显示的列。但是您的游标在您的情况下使用了数据库列名称*名称。因此,您需要做的是告诉适配器将您的数据库列与您的适配器列相匹配。我这样做的方式是使用类似HashMap.put(name,name+“as”SearcgManager.SUGGEST_column_TEXT_1)的内容创建一个HashMap然后在SQLiteBuilder中,您可以执行mSqliteBuilder.setProjectionMap(hashMap)在创建光标之前。我不使用onQueryTextChange搜索建议,而是使用contentprovider和可搜索的配置文件。但是,由于列不匹配,我认为您在列表中看不到您的建议。问题是您为con中的
to
字段提供了布局SimpleCursorAdapter()的structor
。您应该为textview提供一个资源ID,例如android.R.ID.text1
,我也遇到了类似的问题。事实证明,我所需要做的就是更改在列出的条目中显示的文本的颜色。因此,我有类似于
<TextView
android:id="@+id/item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFF2FF"
/>
谢谢@Byron Coughlin!你的代码帮了我大忙,谢谢