3

我在我的代码中使用 AutoCompleteTextView 并使用 SimpleCursorAdapter 从数据库加载列表。

AutoCompleteTextView cocktailIngredientView = (AutoCompleteTextView) findViewById(R.id.item);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
                android.R.layout.simple_spinner_item, mCursor,
                new String[] { "field" },
                new int[] { android.R.id.text1 });
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
cocktailIngredientView.setAdapter(adapter);
cocktailIngredientView.setThreshold(0);

它正确填充列表,但我有两个问题: 1. 我希望对这个列表进行排序 2. 无论我输入什么,它都会显示完整的列表。我希望它根据列表中的匹配模式进行过滤。例如,如果列表包含值 Page、Tools...然后如果我在框中输入 T,则下拉列表应该只显示 Tools。这个想法是在字符串文本的任何位置显示包含输入模式的选项。

如何才能做到这一点?请帮忙。

问候,萨潘

4

2 回答 2

4

您必须告诉适配器要显示哪些项目。我尝试通过使用FilterQueryProvider查询数据库以获取我想在下拉列表中显示的项目来实现类似的东西。

FilterQueryProvider filter = new FilterQueryProvider() {

    @Override
    public Cursor runQuery(CharSequence constraint) {
        // Make a DB query that filters based on the constraint

        return //whatever query results;
    }
};
myAdapter.setFilterQueryProvider(filter);

至于在列表中选择项目时的情况,您必须覆盖CursorToStringConverter. SimpleCursorAdapter就像是:

SimpleCursorAdapter.CursorToStringConverter conv = new SimpleCursorAdapter.CursorToStringConverter() {

    @Override
    public CharSequence convertToString(Cursor cursor) {
        int numCol = cursor.getColumnIndexOrThrow("whateverFieldYouNeed");
        String term = cursor.getString(numCol);
        return term;
    }
};
myAdapter.setCursorToStringConverter(conv);
于 2011-04-16T10:21:49.813 回答
0

而不是CursorToStringConverter你也可以使用

mAdapter.setStringConversionColumn(mCursor.getColumnIndexOrThrow("whateverFieldYouNeed"));
于 2012-10-27T20:19:41.203 回答