【问题标题】:android autocompletetextview should show only relevant options in drop downandroid autocompletetextview 应该只在下拉菜单中显示相关选项
【发布时间】:2011-08-06 20:05:00
【问题描述】:

我在我的代码中使用 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,则下拉列表应仅显示工具。这个想法是在字符串文本的任何位置显示包含输入模式的选项。

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

问候, 萨潘

【问题讨论】:

  • 进一步,当我在下拉列表中选择任何项目时,它会显示 android.database.sqlite...

标签: android filtering options autocompletetextview


【解决方案1】:

您必须告诉适配器要显示哪些项目。我尝试通过使用FilterQueryProvider 来实现与此类似的东西,该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 提供程序,我观察到的一件事是过滤列表中的最后一项没有完全显示。我看到一个滚动条,要完全查看它,我必须向下滚动。默认情况下只有一半可见。
  • 尝试使用setDropDownHeight() [1] 方法来调整下拉菜单中可见的项目数量。 [1]developer.android.com/reference/android/widget/…
【解决方案2】:

您也可以使用 CursorToStringConverter 代替

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多