2012-04-04 11 views
12

FilterableあるAdapterのためのユースケースはEditTextには、ユーザが入力した可能性がありますStringまたはCharSequenceでフィルタリングすることであると思われるが、これは本当にAdapter秒をフィルタリングするためのプラットフォームが提供する唯一の基準でありますか?ListAdapter文字列以外のフィルタ?

オブジェクトのバッキングデータ構造を他の方法で分類することができますか?たとえば、enum属性のシャツオブジェクトのリストがある場合、color?ユーザーは、利用可能なcolorのリストからシャツのリストをフィルタリングできるはずです。良いアプリケーション開発者として、私はフィルタリング機構に組み込まれたプラットフォームを使用したいと思いますが、filter (CharSequence constraint)のような方法でこのFilterを見つけることができます。私は何かを欠いているに違いない。私は、自分のカスタムBaseAdapterの中にこのフィルタリングメカニズムを実装するのに十分なほどシンプルな方法を見ていますが、カスタムフィルタを行う方法がいくつか組み込まれているはずです。誰でも?前もって感謝します。

+0

FacebookSDK 3.0には、他のパラメータでフィルタリングする方法があります。問題は、彼らが新しいフィルタクラスを根底から実装したことです。 詳細については、PickerFragment.GraphObjectFilter を確認してください。 – mach

+1

私は、この質問には、より多くの意見と票を持っていないと信じられない。 OPの質問の背後にある現実は、コアのアンドロイドフレームワークから完全にばかげた排除を強調する。 String以外のものでのフィルタリング?誰にそれが必要なの?信じられない – wkhatch

答えて

0

アンドロイドでは、お使いのアダプタはフィルター処理を実装することができます
は=>これは、フィルターを使用して、データ間の接続である(それはあなたが検索フィルターと同じであってもよいです)。
ここでは、あなたがあなた自身のFilterAdapterを作成して、独自のロジックをもたらすことができるList View Filter Android

0

[あなたがマークの答えが表示されるはずです]例えばこの1つは二つの文字列を持つオブジェクトの世話をし、フィルタを管理するリンク 次のとおりです。

@Override 
public Filter getFilter() { 
    if (twoWordsFilter==null){ 
     twoWordsFilter=new TwoWordsFilter(branchDatas,this); 
    } 
    return twoWordsFilter; 
} 
:あなたのアダプタで

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(); 
    } 
} 

}

はこれを置きます

関連する問題