2012-03-07 70 views
0

这是我的自定义ArrayAdapter定制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; 
    } 
} 

我申请这自动完成场。默认情况下以搜索字符串开头的自动完成搜索列表。我想要包含搜索字符串的列表。

回答

0

对于你想我想你应该写你自己的代码..因为这是不可能的默认自动填充字段的功能... 想这是你正在使用的自动完成字符串数组..

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()。长度> 1(或任何你想要的threshould长度)...我想你会得到要求ired result .. =]

+0

如果这解决了您的问题或帮助..接受答案... =] – 5hssba 2012-03-14 09:37:04