创建用getFilter为BaseAdapter为对象的标题?(Creating getFilter

2019-11-02 05:48发布

我使用的是创建一个ListView CardsUI ,我打算创建使用搜索getFilter() 每个卡上有一个title通过可访问getTitle() 我见过用getFilter的每个实例都一直只是字符串。 有谁知道任何很好的例子(或可以提供一个很好的例子)我怎么会适应用getFilter()来匹配通过的getTitle(返回标题),并与给定的字符串相匹配的标题返回对象的名单?

谢谢。

Answer 1:

我实现了这种功能在我的应用程序。

简要说明。 实现自己的类,它扩展过滤器,像隔壁班:

private class PlanetFilter extends Filter {
@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 = planetList;
            results.count = planetList.size();
        }
        else {
            // We perform filtering operation
            List<Planet> nPlanetList = new ArrayList<Planet>();

            for (Planet p : planetList) {
                if (p.getName().toUpperCase().startsWith(constraint.toString().toUpperCase()))
                    nPlanetList.add(p);
            }

            results.values = nPlanetList;
            results.count = nPlanetList.size();

        }
        return results;
    }
}

在你的基地适配器实现过滤的接口,它必须实现用getFilter()方法:

@Override
public Filter getFilter() {
    if (planetFilter == null)
        planetFilter = new PlanetFilter();

    return planetFilter;
}

而绑一起,使用textWatcheredittext ,在其中输入文本。

editTxt.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        System.out.println("Text ["+s+"]");
        aAdpt.getFilter().filter(s.toString());                           
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {

    }

    @Override
    public void afterTextChanged(Editable s) {
    }
});

该代码是从下一个拍摄教程 。



文章来源: Creating getFilter for BaseAdapter for Object titles?