无法在Android.Widget.Filter

时间:2016-03-08 11:16:54

标签: android android-widget android-recyclerview

我无法访问Android.Widget类中的.filter(charSequence)方法。

代码:调用RecyclerView的过滤器。

@OnTextChanged(R.id.microlocation_activity_filter) void onTextChanged(CharSequence strText) {
    recyclerViewAdapter.getFilter().filter(strText);
}

代码:RecyclerViewAdapter中的.getFilter()方法

/**
 * A method to return the filter instance
 * @return FilterClass
 */
public ListFilter getFilter() {
    return this.filterclass;
}

代码:在RecyclerViewAdapter

下过滤实施
private class ListFilter extends Filter {

    /**
     * A method that filters the list according to the query entered
     * @param strText The text which will be matched against entries in the list
     */
    @Override
    protected FilterResults performFiltering(CharSequence strText) {
        ArrayList<String> lsTemporaryFilterList = new ArrayList<>();
        if(strText != null && !TextUtils.isEmpty(strText)) {
            Iterator<String> iterator = lsMicrolocationList.iterator();
            do {
                String strMicrolocation = iterator.next();
                if (strMicrolocation.toLowerCase().contains(strText.toString().toLowerCase()))
                    lsTemporaryFilterList.add(strMicrolocation);
            } while (iterator.hasNext());
        } else
            lsTemporaryFilterList.addAll(lsMicrolocationList);

        FilterResults filterResults = new FilterResults();
        filterResults.count = lsTemporaryFilterList.size();
        filterResults.values = lsTemporaryFilterList;
        return filterResults;
    }

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
        lsFilteredList = (List<String>) results;
        notifyDataSetChanged();
    }
}

错误:当我只传递一个参数时

  

错误:(77,40)错误:类Filter中的方法过滤器不能应用于给定类型;   required:CharSequence,FilterListener   发现:CharSequence   原因:实际和正式的参数列表长度不同

错误:当我按照上一个错误

中的说明传递两个参数时
  

错误:(79,40)错误:Filter中的filter(CharSequence,FilterListener)在无法访问的类或接口中定义

我建议人们在回答之前通过Android Filter Documentation

编辑:2016年3月17日

我能够解决问题。对于那些可能在以后遇到这种情况的人来说正在寻找解决方案,此插图中子类的访问修饰符为private。即使从不同的方法返回了Filter类的实例,也阻止了对其内部方法的访问。 .filter()在工作线程&amp;中执行performFiltering()方法。很多其他的东西。为了让类调用子类的内部方法,访问修饰符必须保持公共或至少是包级别,具体取决于两个文件是否位于同一个包中。

  

必须将类访问修饰符保持公开。

0 个答案:

没有答案