2016-09-13 9 views
2

私はAndroidにはかなり新しいです。私はListViewのための定義済みフィルタを実装したい。私のListViewは数字を含んでおり、クリックすると "Show odd"、 "Show even"、 "Show all"のようなオプションが表示されるフィルタアイコンが表示されます。フィルターあらかじめ定義されたフィルターを使ったandroid ListView

enter image description here

私の質問は、フィルターアイコンのクリック時にポップアップダイアログを表示する方法ですか?それが単純なポップアップダイアログを使用して達成される場合、どのようにオプションを選択してListViewをフィルタリングするのですか?私はAndroidのフォーラムを検索しようとしましたが、主にテキストフィルタについて話します。同様の問題文を持つ記事へのポインタも役に立ちます。

+0

使用[この](https://gist.github.com/pskink/ 2dd4d17a93caf02ff696533e82f952b0)汎用アダプタ – pskink

答えて

1

あなたがそうのようなFilter実現することができます。

​​

そして、あなたがあなたの元のリストのためのセッターを追加する必要があります。あなたはこれらと同様の変更を行う必要があり、あなたのアダプタクラスで

class MyFilter extends Filter { 

    private final MyAdapter myAdapter; 

    public MyFilter(MyAdapter myAdapter) { 
     this.myAdapter = myAdapter; 
    } 

    @Override 
    protected Filter.FilterResults performFiltering(CharSequence constraint) { 
     FilterResults results = new FilterResults(); 
     if (constraint == null || constraint.length() == 0) { 
    // unfiltered: show all 
      results.values = myAdapter.getOriginalList(); 
      results.count = myAdapter.getOriginalList().size(); 
     } else { 
    // filtered 
      List<Integer> newWorkingList = new ArrayList<>(); 
      if (constraint.equals('1')) { 
    // odd 
       for (Integer integer : myAdapter.getOriginalList()) { 
        if (integer % 2 == 1) { 
          newWorkingList.add(integer); 
        } 
       } 
      } else if (constraint.equals('2')) { 
    // even 
       for (Integer integer : myAdapter.getOriginalList()) { 
        if (integer % 2 == 0) { 
         newWorkingList.add(integer); 
        } 
       } 
      } 
      results.values = newWorkingList; 
      results.count = newWorkingList.size(); 
     } 
     return results; 
    } 

    @Override 
    protected void publishResults(CharSequence constraint, FilterResults results) { 
     myAdapter.setFilteredList((List<String>) results.values); 
     if (results.count == 0) { 
      myAdapter.notifyDataSetInvalidated(); 
     } else { 
      myAdapter.notifyDataSetChanged(); 
     } 
    } 
} 

を。

そして、最後に、あなたのポップアップダイアログのリスナーに、ユーザーの選択に応じてこれらの行を追加する必要があります。

myAdapter.getFilter().filter(null); 
myAdapter.getFilter().filter('1'); 
myAdapter.getFilter().filter('2'); 
+0

ソリューションをありがとう。 – Biplab

関連する問題