0

私のアプリには次のようなベクターがあります。

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

ご覧のとおり、これは私自身のクラスのオブジェクトのベクトルです。Firm

だから私の質問に、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);
}
4

1 に答える 1

1

はい、ArrayAdapterを実装することでそれを行うことができますが、getFilter()によって使用されるを実装する必要がありますAutoCompleteTextView。これに似たものが機能する可能性があります。

    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

于 2012-05-01T15:04:35.743 に答える