2011-05-20 14 views
10

Önemli bir değer sisteminden çıkacak bir otomatik tamamlama görünümü üzerinde çalışıyorum ve yayınlama Sonuçlarının işe yaraması için ne yapmam gerektiğini bulmaya çalışıyorum, çünkü sonuçlar paramın yayınlanmaya başlaması Burada hata ayıklayıcıda doğrudur, Bununla birlikte, neye karşılık gelmesi gerektiğine veya sonuçların nasıl gösterileceğine dair hiçbir fikrim yok, herkes yardımcı olabilir mi? Bu nesnenin yaratılması başka dosyada olduğunu ve şu şekilde görünür:Android'de Filtreler genişletilirken publishResults() yöntemini nasıl kullanırım?

autoCompleteBox.setAdapter(new AutoCmpAdapter(this, android.R.layout.simple_dropdown_item_1line)); 

ve aşağıdaki gibi kod gerisi: Herşeyden

public class AutoCmpAdapter extends ArrayAdapter<String> implements Filterable { 

    protected Filter filter; 
    protected ArrayList<String> items; 
    protected ArrayList<String> res; 
    String lWds[] = { "HOMER", "TOM" }; 
    String sWds[] = { "SIMPSON", "JONES" }; 

    public AutoCmpAdapter(Context context, int textViewResourceId) { 
     super(context, textViewResourceId); 
     filter = new PhysFilter(); 
     res = new ArrayList<String>(); 
    } 

    public Filter getFilter() { 
     return filter; 
    } 

    private class PhysFilter extends Filter { 

     @Override 
     protected FilterResults performFiltering(CharSequence constraint) { 
      FilterResults f = new FilterResults(); 
      res.clear(); 
      if (constraint != null) { 
       ArrayList<String> res = new ArrayList<String>(); 
       for (int x = 0; x < sWds.length; x++) { 
        if (sWds[x].toUpperCase().startsWith(constraint.toString().toUpperCase())) { 
         res.add(lWds[x]); 
        } 
       } 
       f.values = res.toArray(); 
       f.count = res.size(); 
      } 
      return f; 
     } 

     @Override 
     protected void publishResults(CharSequence constraint, FilterResults results) { 
      if (results.count > 0) { 
       Log.println(Log.INFO, "Results", "FOUND"); 
       notifyDataSetChanged(); 
      } else { 
       Log.println(Log.INFO, "Results", "-"); 
       notifyDataSetInvalidated(); 
      } 
     } 
    } 
} 

cevap

10

İlk dize dizi kullanmayın.

public class AutoCmpAdapter extends ArrayAdapter<String> implements Filterable { 

    protected Filter filter; 
    protected ArrayList<String> items; 
    protected ArrayList<String> res; 

    String sWds[] = { "SIMPSON", "JONES" }; 

    public AutoCmpAdapter(Context context, int textViewResourceId,ArrayList<String> listData) { 
     super(context, textViewResourceId,0,listData); 

     filter = new PhysFilter(); 
     res = new ArrayList<String>(); 
    } 

    public Filter getFilter() { 
     return filter; 
    } 

    private class PhysFilter extends Filter { 

     @Override 
     protected FilterResults performFiltering(CharSequence constraint) { 
      FilterResults f = new FilterResults(); 
      res.clear(); 
      if (constraint != null) { 
       ArrayList<String> res = new ArrayList<String>(); 
       for (int x = 0; x < sWds.length; x++) { 
        if (sWds[x].toUpperCase().contains(constraint.toString().toUpperCase())) { 
         res.add(sWds[x]); 
        } 
       } 
       f.values = res;//.toArray(); 
       f.count = res.size(); 
      } 
      return f; 
     } 

     @SuppressWarnings("unchecked") 
     @Override 
     protected void publishResults(CharSequence constraint, FilterResults results) { 
      if (results.count > 0) { 
       Log.println(Log.INFO, "Results", "FOUND"); 
       lWds.clear(); 
       lWds.addAll((ArrayList<String>) results.values); 
       notifyDataSetChanged(); 
      } else { 
       Log.println(Log.INFO, "Results", "-"); 
       notifyDataSetInvalidated(); 
      } 
     } 
    } 
} 
+0

+1 Güzel çözümü gibi onCreate

AutoCompleteTextView mAutoCompleteTextView; ArrayList<String> lWds = new ArrayList<String>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mAutoCompleteTextView=(AutoCompleteTextView)findViewById(R.id.testAutoComplete); final AutoCmpAdapter adapter= new AutoCmpAdapter(this, android.R.layout.simple_dropdown_item_1line,lWds); mAutoCompleteTextView.setAdapter(adapter); mAutoCompleteTextView.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void afterTextChanged(Editable s) { adapter.getFilter().filter(s); } }); } 

ve adaptör sınıfında bu deneyin .. Eğer varsa deyimi ayarlayabilirsiniz anahtar değer çifti için çalışmak. –

+4

lWds, publishResults içinde nereden geliyor? –

+0

@artworkad シ sağdaki işaret parmağından, sol işaret parmağı olduğunu mu düşünüyorsunuz? Haha..s, OP'nin kodundan – whyoz

İlgili konular