TextField和ListContainer实现简单的模糊搜索功能
头像 Tiechui.Wang 2021-01-18 12:19:00    发布
3018 浏览 14 点赞 15 收藏

所需要的代码如下,


public class MyProvider extends RecycleItemProvider {

    private List<String> mSourceList;
    private List<String> mList;
    private NameFilter mNameFilter;

    public MyProvider(List<String> list) {
        this.mList = list;
        this.mSourceList = list;
    }

    @Override
    public int getCount() {
        return null!=mList?mList.size():0;
    }

    @Override
    public Object getItem(int i) {
        return null!=mList?mList.get(i):null;
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public Component getComponent(int i, Component component, ComponentContainer componentContainer) {
        return null;
    }

    @Override
    public TextFilter getFilter() {
        if(mNameFilter==null){
            mNameFilter = new NameFilter();
        }
        return mNameFilter;
    }

     class NameFilter extends TextFilter{

        @Override
        protected FilterResults executeFiltering(CharSequence charSequence) {
            FilterResults filterResults = new FilterResults();
            if(charSequence==null){
                filterResults.results=mSourceList;
            }else{
                List<String> filteredList= new ArrayList<>();
                for (Iterator<String> iterator = mList.iterator();iterator.hasNext();){
                    String name = iterator.next();
                    if(name.contains(charSequence)){
                        filteredList.add(name);
                    }
                }
                filterResults.results = filteredList;
            }
            return filterResults;
        }

        @Override
        protected void publishFilterResults(CharSequence charSequence, FilterResults filterResults) {
            mList = (List<String>) filterResults.results;
            if(filterResults.size>0){
                notifyDataChanged();
            }else{
                notifyDataInvalidated();
            }
        }
    }
}



textField.addTextObserver(new Text.TextObserver() {
    @Override
    public void onTextUpdated(String s, int i, int i1, int i2) {
        if(s.length()==0){
            textField.removeTextObserver(this);
            provider.getFilter().filter(s);
            provider.notifyDataChanged();
            textField.addTextObserver(this);
        }else {
            textField.removeTextObserver(this);
            provider.getFilter().filter(null);
            provider.notifyDataChanged();
            textField.addTextObserver(this);
        }
    }
});


©本站发布的所有内容,包括但不限于文字、图片、音频、视频、图表、标志、标识、广告、商标、商号、域名、软件、程序等,除特别标明外,均来源于网络或用户投稿,版权归原作者或原出处所有。我们致力于保护原作者版权,若涉及版权问题,请及时联系我们进行处理。
分类
其它
头像

Tiechui.Wang

我还没有写个人简介......

1091

帖子

0

提问

893

粉丝

关注
热门推荐
地址:北京市朝阳区北三环东路三元桥曙光西里甲1号第三置业A座1508室 商务内容合作QQ:2291221 电话:13391790444或(010)62178877
版权所有:电脑商情信息服务集团 北京赢邦策略咨询有限责任公司
声明:本媒体部分图片、文章来源于网络,版权归原作者所有,我司致力于保护作者版权,如有侵权,请与我司联系删除
京ICP备:2022009079号-2
京公网安备:11010502051901号
ICP证:京B2-20230255