我有一个带有SimpleCursorAdapter的SearchView,它可以查询来自SQLite DB的建议。查询工作正常,SearchView会弹出一个包含建议的列表。但是这些建议不可见。例如,如果有两个建议,可以看到有两个列表条目,但不显示文本。 SearchView包含在DialogFragment中。
这是游标适配器和搜索视图的初始化:
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中生成搜索建议,生成新光标并将其注入suggestAdapter:
@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;
}
}
答案 0 :(得分:2)
问题是适配器将显示具有列名称的数据,例如SUGGEST_COLUMN_TEXT_1。这是搜索下拉框中显示的列。但是你的游标使用数据库列名* name"在你的情况下。因此,您需要做的是告诉适配器将数据库列与适配器列匹配。我这样做的方法是使用hashMap.put(name,name +" as" SearcgManager.SUGGEST_COLUMN_TEXT_1)创建一个HashMap,然后在SQLiteBuilder中创建mSqliteBuilder,你可以在创建之前执行mSqliteBuilder.setProjectionMap(hashMap)你的光标。我没有使用onQueryTextChange进行搜索建议,但使用contentprovider和可搜索的配置文件。但是因为列不匹配是为什么我认为你没有在列表中看到你的建议
答案 1 :(得分:0)
问题是您为to
的构造函数中的SimpleCursorAdapter()
字段提供了布局。您应该为文本视图提供资源ID,例如android.R.id.text1
。
答案 2 :(得分:0)
我有类似的问题。事实证明,我需要做的就是更改列出的条目中显示的文本的颜色。所以我有类似
<TextView
android:id="@+id/item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFF2FF"
/>
&#13;
我希望这会有所帮助。