2016-07-19 13 views
0

こんにちは私のプロジェクトでは、「カテゴリ」という配列のような値が多い「プログラム」というオブジェクトクラスを作成しました。すべてのプログラムはListViewで表示され、レイアウトには設定されたカテゴリSpinner(該当するカテゴリでプログラムを分類する目的で)が設定されています。Spinnerを持つオブジェクトのListViewをAndroidオブジェクト内の値でフィルタリングする

私は、コードのこの部分を持っている:

final ArrayAdapter spinnerAdapter = new ArrayAdapter(getActivity(), R.layout.layout_spinner, MainActivity.categories); //MainActivity.categories is an array filled with strings 

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 

     String text = spinner.getSelectedItem().toString(); 
     listAdapter.getFilter().filter(text); 
     listAdapter.notifyDataSetChanged(); 
    } 

Program.java

public class Program { 

    public String programName; 
    public ArrayList<String> categories; 

    ..... 

    public ArrayList<String> getCategories() { 
     return categories; 
    } 

    public String toString() { 
     return programName; 
    } 
} 

しかし、これだけのフィルタリスト上のテキストによると、どのように私はそれがでそれをフィルタリングするために取得することができますプログラム一覧のCategory変数?

+0

さらに表示する必要があります。プログラムクラスのクラスと、スピナーをどのように配置するかを示します。 Uのやり方は、テキストとほぼ同じ方法でカテゴリ別にフィルタリングすることです。私がもっと見るまで、適切な解決策を提供するのは難しいです。 –

+0

@AndreiT投稿を編集してコードを追加しました。変数をフィルタリングすることは、フィルタメソッドがテキストにのみプロンプトされるので、テキストをフィルタリングするのと同じだとは思わない – user2514575

+0

カテゴリ別にフィルタリングする方法の例を挙げてください。私はあなたが達成したいことを理解していたので、私はそれほど確かではありません。 –

答えて

0

まあ、

まずここを見て、フィルタリングについて少し理解:

Adapter filtering android

次に、私はあなたのケースでは、あなたが次のことを行う必要があると思う:

@Override 
protected FilterResults performFiltering(CharSequence constraint) { 
    FilterResults results = new FilterResults(); 
    // We implement here the filter logic 
    if (constraint == null || constraint.length() == 0) { 
     // No filter implemented we return all the list 
     results.values = yourList; 
     results.count = yourList.size(); 
    } 
    else { 
    // We perform filtering operation 
    List<Program> finalList = new ArrayList<Program>(); 
    //here think of something regarding the upper and lower cases. 
    for (Program p : yourList) {    
     if(p.getCategories(). 
       contains(constraint.toString())) 
     finalList.add(p); 
    } 

    results.values = finalList; 
    results.count = finalList.size(); 
    } 
    return results; 
} 
+0

これはうまくいくようです。どこに置くべきですか? ArrayAdapterクラスを作成する必要がありますか? – user2514575

+0

サンプルコードを見てください。すべては –

+0

または... https://gist.github.com/tobiasschuerg/3554252です。それはあなたにスタートを与えるはずです。 –

関連する問題