2012-05-01 7 views
0

私は私のアプリでは以下のようにベクトルを持っていました:オートコンプリート - アンドロイド

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

ご覧の通り、これはオブジェクトのベクトルである私自身のクラスからFirm

私にそうこの `VectorにAutoCompleteを追加することは可能ですか? 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を実装することによってそれを行うことができますが、AutoCompleteTextViewで使用されているgetFilter()を実装する必要があります。これに似た何かがうまくいくかもしれない:

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への入力に基づいて実際にテストを実行する場所です。

関連する問題