Android 用于自动完成显示所有结果的自定义阵列适配器

Android 用于自动完成显示所有结果的自定义阵列适配器,android,autocomplete,android-arrayadapter,Android,Autocomplete,Android Arrayadapter,这是我的定制阵列适配器 public class CustomAdapater extends ArrayAdapter implements Filterable { private ArrayList<String> mData; private ArrayList<String> orig; private ArrayList<String> suggestions; LayoutInflater inflater

这是我的定制阵列适配器

    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;
    }
}
公共类CustomAdapater扩展ArrayAdapter实现可过滤{
私有ArrayList mData;
私人ArrayList orig;
私人ArrayList建议;
充气机;
@抑制警告(“未选中”)
公共CustomAdapater(上下文上下文,int textViewResourceId,ArrayList al){
super(上下文,textViewResourceId,al);
充气器=充气器。从(上下文);
mData=al;
orig=(ArrayList)mData.clone();
this.suggestions=new ArrayList();
}
@凌驾
public int getCount(){
返回建议。size();
}
@凌驾
公共对象getItem(int位置){
返回建议。获取(职位);
}
@凌驾
公共过滤器getFilter(){
过滤器myFilter=新过滤器(){
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
FilterResults FilterResults=新的FilterResults();
if(约束!=null){
建议。清晰();
用于(字符串s:orig){
如果(s!=null&&s.contains(约束))
建议.添加(s);
}
filterResults.values=建议;
filterResults.count=建议.size();
}
返回过滤器结果;
}
@抑制警告(“未选中”)
@凌驾
受保护的void publishResults(CharSequence Contrint、FilterResults结果){
mData=(ArrayList)results.values;
notifyDataSetChanged();
}
};
返回myFilter;
}
}

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

对于您想要的功能,我认为您应该编写自己的代码。。由于无法使用默认的自动完成字段。。。 假设这是用于自动完成的字符串数组

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

for(inti=0;ii如果这解决了您的问题或有助于..接受答案…=]