Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有自定义建议适配器的Android SearchView_Android_Sqlite_Searchview - Fatal编程技术网

带有自定义建议适配器的Android SearchView

带有自定义建议适配器的Android SearchView,android,sqlite,searchview,Android,Sqlite,Searchview,我有一个带有SimpleCursorAdapter的SearchView,它可以查询来自SQLite数据库的建议。查询工作正常,SearchView会弹出一个包含建议的列表。然而,这些建议并不明显。例如,如果有两个建议,可以看到有两个列表条目,但不显示文本。SearchView包含在DialogFragment中 这是光标适配器和搜索视图的初始化: suggestionAdapter = new SimpleCursorAdapter(getActivity(), and

我有一个带有SimpleCursorAdapter的SearchView,它可以查询来自SQLite数据库的建议。查询工作正常,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中生成,其中新光标将生成并注入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!你的代码帮了我大忙,谢谢