2012-04-04 14 views
12

O Filterable bir Adapter için kullanım durumu bir EditText kullanıcı tarafından girilen olabilecek bir String veya CharSequence göre filtre uygulamak için gibi görünüyor, ama bu gerçekten Adapter s filtrelemek için bir platform sunan tek kriter nedir?ListAdapter Dizeleri kullanmaktan başka süzgeçten mi?

Aksi halde kategorize edilebilecek nesnelerin destek veri yapısına sahip olursam ne olur? örneğin, enum özniteliği olan color özniteliğine sahip bir Gömlek nesnelerim varsa ne olur? Kullanıcı, mevcut gömleklerin listesini mevcut color s listesinden filtreleyebilmelidir. İyi bir uygulama geliştiricisi olarak, filtreleme mekanizmasında yerleşik olan platformları kullanmak istiyorum, ancak bulabildiğim her şey bu Filter, filter (CharSequence constraint) gibi yöntemlerle. Bir şey kaçırmam lazım. Bu filtreleme mekanizmasının kendi özel BaseAdapter içinde nasıl uygulanacağını basit görebiliyorum, ancak özel filtreler yapmak için bazı yerleşik olması gerektiği düşünülüyor. Kimse? Şimdiden teşekkürler.

+0

FacebookSDK 3.0, diğer parametrelere filtre uygulamam için bir yol var. Sorun şu ki, yeni filtre sınıfını sıfırdan başlattılar. Daha fazla bilgi için bkz. PickerFragment.GraphObjectFilter . – mach

+1

Bu sorunun daha fazla görüntüleme ve oylamaya sahip olmadığına inanamıyorum. OP'nin sorusunun ardındaki gerçek, çekirdek android çerçevesinden tamamen aptalca bir dışlamanın altını çiziyor. String'in dışındaki herhangi bir şeye mi süzülüyor? Kimin buna ihtiyacı var? Inanılmaz – wkhatch

cevap

0

Android'de olarak, adaptör Filtrelenebilir uygulayabilir
=> Bu Filter ile veri arasındaki bağlantıdır (yani aradığınız Filtresi ile aynı olabilir).
Burada, kendi FilterAdapter oluşturmak ve kendi mantığı getirebilir List View Filter Android

0

[Sen işaretli cevabı görmelisiniz ] örneğin bu bir iki dizeleri ile nesnenin özen ve filtreyi yönetmek bağlantı geçerli:

@Override 
public Filter getFilter() { 
    if (twoWordsFilter==null){ 
     twoWordsFilter=new TwoWordsFilter(branchDatas,this); 
    } 
    return twoWordsFilter; 
} 
: En adaptörü

public class TwoWordsFilter extends Filter { 
ArrayList<BranchData> branchDatas = new ArrayList<BranchData>(); 
private BranchDataAdapter branchDataAdapter; 
public TwoWordsFilter(ArrayList<BranchData> branchDatas,BranchDataAdapter branchDataAdapter) { 
    this.branchDatas = branchDatas; 
    this.branchDataAdapter=branchDataAdapter; 
} 

@Override 
protected FilterResults performFiltering(CharSequence constraint) { 
    FilterResults results = new FilterResults(); 
    if (constraint==null || constraint.length()==0){ 
     results.values=branchDatas; 
     results.count=branchDatas.size(); 
    }else { 
     List<BranchData> mBranchDatas=new ArrayList<BranchData>(); 
     for (BranchData branchData : branchDatas) { 
      if (branchData.getBranch_name().trim().toLowerCase().startsWith(constraint.toString().trim().toLowerCase()) || 
      branchData.getCity().trim().toLowerCase().startsWith(constraint.toString().trim().toLowerCase())){ 
       mBranchDatas.add(branchData); 
      } 
     } 
     results.values=mBranchDatas; 
     results.count=mBranchDatas.size(); 

    } 
    return results; 
} 

@Override 
protected void publishResults(CharSequence constraint, FilterResults results) { 
    if (results.count == 0) 
     branchDataAdapter.notifyDataSetInvalidated(); 
    else { 
     branchDataAdapter.setBranchDatas((ArrayList<BranchData>) results.values); 
     branchDataAdapter.notifyDataSetChanged(); 
    } 
} 

}

bu koymak

İlgili konular