2012-05-01 39 views
0

我已经在我的应用程序是这样一个向量:自动完成与载体 - 安卓

Vector<Firm> firmVector= new Vector<Firm>(); 

正如你可以看到,这是一个对象的载体,从我自己的类Firm

所以我问题,是否可以添加一个AutoComplete这个`Vector?

赞一个,从developer.android.com

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    AutoCompleteTextView textView = (AutoCompleteTextView)findViewById(R.id.autocomplete_country); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, COUNTRIES); 
    textView.setAdapter(adapter); 
} 
+0

是的,这是可能的,我会搜索一个制作自定义适配器的教程。 – Sam

+0

我已经有了一个自定义的适配器,但我的谷歌搜索没有导致任何好的教程。 –

回答

1

是的,你可以通过实现一个ArrayAdapter做到这一点,但你需要实现它使用的AutoCompleteTextViewgetFilter()。同样的事情也到这可能工作:

private class FirmAdapter extends ArrayAdapter<Firm> { 
private Filter filter; 
     @Override 
     public Filter getFilter() 
     { 
      if(filter == null){ 
       filter = new Filter(){ 
        int lastlen = 0; 
        boolean initialized = false; 

        @SuppressWarnings("unchecked") 
        @Override 
        protected void publishResults(CharSequence constraint, FilterResults results) 
        { 
         filteredItems = (List<Firm>)results.values; 
         ArrayAdapter.this.notifyDataSetChanged(); 
        } 

        @Override 
        protected FilterResults performFiltering(CharSequence constraint) 
        { 
         FilterResults results = new FilterResults(); 
         if(constraint == null || constraint.length() == 0){ 
          results.values = null; 
         }else{ 
          String val; 
          Firm obj; 
          constraint = constraint.toString().toUpperCase(); 
          int newlen = constraint.length(); 
          LinkedList<Firm> filteredResults = new LinkedList<Firm>(); 
          if(newlen < lastlen){ 
           int i = 0, size = ArrayAdapter.super.getCount(); 
           for(i=0;i<size;i++){ 
            obj = ArrayAdapter.super.getItem(i); 
            val = obj.toString(); // CUSTOMIZE THIS 
            if(val.contains(constraint)) filteredResults.add(obj); 
           } 
          }else{ 
           int i = 0, size = getCount(); 
           for(i=0;i<size;i++){ 
            obj = getItem(i); 
            val = obj.toString(); // CUSTOMIZE THIS 
            if(val.contains(constraint)) filteredResults.add(obj); 
           } 
          } 
          lastlen = newlen; 
          results.values = filteredResults; 
         } 
         return results; 
        } 
       }; 
      } 
      return filter; 
     } 
    } 
} 

我撕开了这一点,我在一个项目有,所以它需要一些检测和清除,以获得工作(在我的情况我有一组JSONObject实例的过滤器,你有一个Firm),但尝试类似的东西。 CUSTOMIZE THIS的意见是您想根据AutoCompleteTextView的输入实际执行测试的地方。