2012-05-01 37 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的輸入實際執行測試的地方。