带有SimpleCursorAdapter的AutoCompleteTextView不过滤

问题描述 投票:0回答:1

在我的应用程序中,我有一些使用ArrayAdapter的AutoCompleteTextView小部件。

private List<String> adapterList = new ArrayList<String>();
ArrayAdapter<String> dropdownAdapter;
dropdownAdapter = new ArrayAdapter<>(getContext(), R.layout.simple_dropdown_item, adapterList);
autoCompleteTextView.setAdapter(dropdownAdapter);

效果很好。当我在视图中键入内容时,在下拉菜单中会出现单词开头-结果。

我想使用另一个AutoCompleteTextView来执行此操作,但是这次使用SimpleCursorAdapter。

nameSearchCursor = dbHelper.getChecklistTabDataByChecklistId(outingId, checklistId, nameColumn);
NameSearch = root.findViewById(R.id.SearchNames);
String[] nsColumns = new String[]{nameColumn};
int[] nsTo = new int[]{R.id.simpleDropdownItem};
nameSearchCursorAdapter = new SimpleCursorAdapter(getContext(), R.layout.simple_dropdown_item,
        nameSearchCursor, nsColumns, nsTo, 0);
NameSearch.setAdapter(nameSearchCursorAdapter);

如果我开始在此新视图中输入内容,则会显示下拉列表并显示整个列表,并且在我输入内容时不会发生任何变化。没有过滤发生。我需要做一些不同的事情(也许是为什么)来使CursorAdapter可以与此视图一起使用,而在使用ArrayAdapter时我不需要这样做。我已经搜索了该站点并阅读了《开发人员文档》,并且肯定有一些我不了解的内容。请赐教。

android autocompletetextview simplecursoradapter
1个回答
0
投票

此站点允许我回答以下问题:http://www.outofwhatbox.com/blog/2010/11/android-simpler-autocompletetextview-with-simplecursoradapter/

这是我完成的代码:

private void setUpNameSearch() {
    // Get AutoCompleteTextView
    nameSearchView = root.findViewById(R.id.SearchNames);
    // Define from/to info
    final String[] nsColumns = new String[]{nameColumn};
    final int[] nsTo = new int[]{R.id.simpleDropdownItem};
    // Create adapter. Cursor set in setFilterQueryProvider() below.
    nameSearchCursorAdapter = new SimpleCursorAdapter(getContext(), R.layout.simple_dropdown_item,
            null, nsColumns, nsTo, 0);
    // Set adapter on view.
    nameSearchView.setAdapter(nameSearchCursorAdapter);

    // OnItemClickListener - User selected value from DropDown
    nameSearchView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> listView, View view, int position, long id) {
            // Get the cursor. Positioned to the corresponding row in the result set.
            Cursor cursor = (Cursor) listView.getItemAtPosition(position);
            // Get the name selected
            String selectedName = cursor.getString(cursor.getColumnIndexOrThrow(nameColumn));
            // Do something with this value...
        }
    });

    // Set the CursorToStringconverter, to provide the values for the choices to be displayed
    // in the AutoCompleteTextview.
    nameSearchCursorAdapter.setCursorToStringConverter(new SimpleCursorAdapter.CursorToStringConverter() {
        @Override
        public CharSequence convertToString(Cursor cursor) {
            final String name = cursor.getString(cursor.getColumnIndexOrThrow(nameColumn));
            return name;
        }
    });

    // Set the FilterQueryProvider, to run queries for choices
    nameSearchCursorAdapter.setFilterQueryProvider(new FilterQueryProvider() {
        @Override
        public Cursor runQuery(CharSequence constraint) {
            Cursor cursor = dbHelper.getMatchingNames(outingId, checklistId, nameColumn,
                    (constraint != null ? constraint.toString() : null));
            return cursor;
        }
    });
}

我想使用SQLite光标复制AutoCompeteTextView的默认单词开始功能,只是发现REGEXP不完全受支持。因此,这个StackOverflow主题给了我LIKE解决方法。 SQLite LIKE alternative for REGEXP, Match Start of Any Word

我希望这对其他人有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.