【问题标题】:Custom ArrayAdapter for autocomplete showing all results用于自动完成显示所有结果的自定义 ArrayAdapter
【发布时间】:2012-03-24 18:50:34
【问题描述】:

这是我的自定义 ArrayAdapter

    public class CustomAdapater extends ArrayAdapter implements Filterable {
    private ArrayList<String> mData;
    private ArrayList<String> orig;
    private ArrayList<String> suggestions;
    LayoutInflater inflater;
    @SuppressWarnings("unchecked")
    public CustomAdapater(Context context, int textViewResourceId,ArrayList<String> al) {
        super(context,textViewResourceId,al);
        inflater = LayoutInflater.from(context);
        mData = al;
        orig = (ArrayList<String>)mData.clone();
        this.suggestions = new ArrayList<String>();
    }

    @Override
    public int getCount() {
        return suggestions.size();
    }

    @Override
    public Object getItem(int position) {
        return suggestions.get(position);
    }

    @Override
    public Filter getFilter() {
        Filter myFilter = new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                FilterResults filterResults = new FilterResults();              
                if(constraint != null) {
                    suggestions.clear();
                    for(String s:orig){
                        if(s!=null && s.contains(constraint))
                        suggestions.add(s);
                    }
                    filterResults.values = suggestions;
                    filterResults.count = suggestions.size();
                }
                return filterResults;
            }

            @SuppressWarnings("unchecked")
            @Override
            protected void publishResults(CharSequence contraint, FilterResults results) {
                mData = (ArrayList<String>)results.values;
                notifyDataSetChanged();             
            }
        };
        return myFilter;
    }
}

我将此应用于自动完成字段。默认情况下,以搜索字符串开头的自动完成搜索列表。我想要包含搜索字符串的列表。

【问题讨论】:

    标签: android autocomplete android-arrayadapter


    【解决方案1】:

    对于您想要的功能,我认为您应该编写自己的代码..因为默认自动完成字段是不可能的... 假设这是您用于自动完成的字符串数组..

    static final String[] COUNTRIES = new String[20];
    

    它有 20 个国家/地区.. 然后尝试像这样搜索..

    for(int i=0;i<20;i++)
    {
    int index=COUNTRIES[i].index(autocomplete.getText().toString);//<---- here autocomplete is the autocomplete textview
    if (index >-1)
    {
    lst.add(COUNTRIES[i])<----- lst is the arraylist of strings you should create
    }
    }
    runOnUiThread(new Runnable(){
     public void run() {
     for(int k=0;k<lst.size();k++)
     {
    adapter.add(lst[k])
     }
     adapter.notifyDataSetChanged();
    }
    }
    );
    

    当 autocomplete.getText().length > 1(或任何您想要的阈值长度)时,在另一个线程中运行此代码...我认为您将获得所需的结果.. =]

    【讨论】:

    • 如果这解决了您的问题或帮助.. 接受答案... =]
    猜你喜欢
    • 2013-07-10
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 2011-09-08
    • 2021-11-20
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    相关资源
    最近更新 更多