【问题标题】:Android SearchView with custom suggestions adapter带有自定义建议适配器的 Android SearchView
【发布时间】:2014-03-24 21:53:26
【问题描述】:

我有一个带有 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 中生成,其中新光标被生成并注入到建议适配器中:

@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;
    }
}

【问题讨论】:

  • 你的代码对我帮助很大,谢谢

标签: android sqlite searchview


【解决方案1】:

问题在于适配器将显示具有列名的数据,例如 SUGGEST_COLUMN_TEXT_1。这是显示在搜索下拉框中的列。但是您的光标在您的情况下使用数据库列名称 *name"。所以您要做的就是告诉适配器将您的数据库列与您的适配器列匹配。我这样做的方法是创建一个带有类似 hashMap 的 HashMap。 put(name, name + " as " SearcgManager.SUGGEST_COLUMN_TEXT_1) 然后在 SQLiteBuilder mSqliteBuilder 中,您可以在创建光标之前执行 mSqliteBuilder.setProjectionMap(hashMap)。我不使用 onQueryTextChange 搜索建议,而是使用 contentprovider 和可搜索的配置文件. 但是因为列不匹配是为什么我相信你没有在你的列表中看到你的建议

【讨论】:

  • 谢谢@Byron Coughlin!
【解决方案2】:

问题是您在SimpleCursorAdapter() 的构造函数中为to 字段提供了布局。您应该为文本视图提供资源 ID,例如 android.R.id.text1

【讨论】:

    【解决方案3】:

    我遇到了类似的问题。事实证明,我需要做的就是更改列出的条目中显示的文本的颜色。所以我有类似的东西

    <TextView
            android:id="@+id/item"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#FFF2FF"
            />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-24
      • 2013-10-07
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 2014-06-18
      • 1970-01-01
      • 2020-12-16
      相关资源
      最近更新 更多