Android AutocompleteTextView应该在下拉菜单中仅显示相关选项。

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。这个想法是显示包含任何字符串文本中输入模式的选项。
如何做到这一点?

当我在下拉列表中选择任何项时,它会显示android.database.sqlite... - Sapan
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);

当您在列表中选择一个项目时,您需要覆盖SimpleCursorAdapterCursorToStringConverter。例如:

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);

谢谢你的回答。它对我真的很有用。但是使用filterquery提供程序,我观察到过滤列表中的最后一项并没有完全显示出来。我看到了一个滚动条,要想完全查看它,我必须向下滚动。默认情况下,它只能显示一半。 - Sapan
尝试使用setDropDownHeight()[1]方法来调整下拉菜单中可见的项目数量。[1] http://developer.android.com/reference/android/widget/AutoCompleteTextView.html#setDropDownHeight(int) - Zarah

0

你可以使用其他方法代替 CursorToStringConverter

mAdapter.setStringConversionColumn(mCursor.getColumnIndexOrThrow("whateverFieldYouNeed"));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接