【问题标题】:how to show suggestions of autocomplete Text Box contains with??如何显示自动完成文本框包含的建议?
【发布时间】:2018-03-30 18:51:41
【问题描述】:

自动完成框下拉建议未显示包含其显示的 StartWith。

这是我的代码

 final ArrayList<String> listFilterJob = new ArrayList<>();
    listFilterJob.add("Anuj");
    listFilterJob.add("Akshay");
    listFilterJob.add("Ananta");
    listFilterJob.add("Muskan");
    listFilterJob.add("sachin");

    ArrayAdapter adapterFiltersJob = new ArrayAdapter(this,   android.R.layout.simple_list_item_1, listFilterJob);
    edtFilterJob.setThreshold(1);
    edtFilterJob.setDropDownWidth(350);
    edtFilterJob.setAdapter(adapterFiltersJob);

当我键入“an”以自动完成文本框时,它的显示结果 Anuj 和 Ananta 在下拉列表中,但我想要 Anuj, 安塔和麝香。 我该怎么做,帮帮我。

【问题讨论】:

    标签: android autocompletetextview


    【解决方案1】:

    您需要扩展实现FilterableArrayAdapter。 检查这个 SO 问题和答案:Filtering AutoCompleteTextView to show partial match

    所以你的解决方案是(问题和答案的组合):

    public class CodesArrayAdapter extends ArrayAdapter implements Filterable{
    
        List<String> allCodes;
        List<String> originalCodes;
        StringFilter filter;
    
        public CodesArrayAdapter(Context context, int resource, List<String> keys) {
            super(context, resource, keys);
            allCodes=keys;
            originalCodes=keys;
        }
    
        public int getCount() {
            return allCodes.size();
        }
    
        public Object getItem(int position) {
            return allCodes.get(position);
        }
    
        public long getItemId(int position) {
            return position;
        }
    
        private class StringFilter extends Filter {
            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
    
                String filterString = constraint.toString().toLowerCase();
                FilterResults results = new FilterResults();
                final List<String> list = originalCodes;
    
                int count = list.size();
                final ArrayList<String> nlist = new ArrayList<String>(count);
                String filterableString ;
    
                for (int i = 0; i < count; i++) {
                    filterableString = list.get(i);
                    if (filterableString.toLowerCase().contains(filterString)) {
                        nlist.add(filterableString);
                    }
                }
    
                results.values = nlist;
                results.count = nlist.size();
                return results;
            }
    
            @SuppressWarnings("unchecked")
            @Override
            protected void publishResults(CharSequence constraint, FilterResults results) {
                allCodes = (ArrayList<String>) results.values;
                notifyDataSetChanged();
            }
    
        }
    
    
        @Override
        public Filter getFilter()
        {
            return new StringFilter();
        }
    }
    

    【讨论】:

    • 将其添加为单独的类文件并使用CodesArrayAdapter 而不是ArrayAdapter
    • 它的工作但在edittext大小为o时给出NullPointerException
    • java.lang.NullPointerException:尝试在 Utils.CodesArrayAdapter.getCount(CodesArrayAdapter.java:27) 处的空对象引用上调用接口方法“int java.util.List.size()” android.widget.AutoCompleteTextView$PopupDataSetObserver$1.run(AutoCompleteTextView.java:1293)
    • 它的工作感谢您的帮助...将 try catch 放入 getcount 方法
    • 检查,没问题,很高兴它有帮助。
    猜你喜欢
    • 2012-11-15
    • 1970-01-01
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    • 2018-04-27
    相关资源
    最近更新 更多