0

就像标题说的那样,我得到了一个我想要使用过滤器的列表,其中包含 7 个选项。

如果我想将所有这些选项放在一个案例中,我会看到 7*6*5*4*3*2*1 意味着 5040 种可能性。正确的?

那么我怎样才能做到这一点,它不是这么大的 switch 语句?

我在 google 上查看过,但找不到任何解决方案。比如:android多选项案例android过滤器搜索listview

4

4 回答 4

1

您希望将每个选项依次应用于您获得的过滤列表。因此,如果第一个选项打开,则获取已被选项 1 过滤的新列表。然后,如果第二个选项打开,则使用选项 2 过滤选项 1 中的过滤列表。依此类推。

您最终会得到 7 个 if(每个选项 1 个),您应该继续过滤您返回的列表。

于 2013-10-25T11:58:45.877 回答
0

试试这个方法:扩展过滤器:

  @Override
public Filter getFilter() {

    Filter filter = new Filter() {

        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {

            modelValues = (ArrayList<String>) results.values; // has

            notifyDataSetChanged();
        }

        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            FilterResults results = new FilterResults();
            List<Model> FilteredArrList = new ArrayList<Model>();

            if (mOriginalValues == null) {
                mOriginalValues = new ArrayList<Model>(modelValues); // saves

            }

            /********
             * 
             * If constraint(CharSequence that is received) is null returns
             * the mOriginalValues(Original) values else does the Filtering
             * and returns FilteredArrList(Filtered)
             * 
             ********/
            if (constraint == null || constraint.length() == 0) {

                // set the Original result to return
                results.count = mOriginalValues.size();
                results.values = mOriginalValues;
            } else {
                Locale locale = Locale.getDefault();
                constraint = constraint.toString().toLowerCase(locale);
                for (String model : mOriginalValues) {


                    String data =model;
                    if (data.toLowerCase(locale).contains("7".toString())||data.toLowerCase(locale).contains("6".toString())||data.toLowerCase(locale).contains("5".toString())||data.toLowerCase(locale).contains("4".toString())) {

                        FilteredArrList.add(modelMyMall);
                    }
                }
                // set the Filtered result to return
                results.count = FilteredArrList.size();
                results.values = FilteredArrList;

            }
            return results;
        }
    };
    return filter;
}
于 2013-10-25T12:10:09.233 回答
0

使用这种方式:

 List<String> list = new ArrayList<String>(Arrays.asList(new String[] 
                              {"7", "6","3", "5"})); //7*6*5*$*3*2*1
       System.out.println("List Before: " + list);
    for (Iterator<String> it=list.iterator(); it.hasNext();) {
if (!it.next().contains("How"))
    it.remove(); // NOTE: Iterator's remove method, not ArrayList's, is used.
  }
    System.out.println("List After: " + list);
于 2013-10-25T12:45:07.277 回答
0

如果它不符合标记不需要检查其他选项,您可以简单地检查第一个选项,而不是为每个选项制作一个 switch 语句。同样,如果第一个选项满足条件,它将不会检查您的第一个选项,如果它没有满足条件,则转到第二个选项,则无需检查其余选项,依此类推...

于 2013-10-25T12:05:28.707 回答