Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在RealmRecyclServiceAdapter中实现filterable_Android_Filter_Android Recyclerview_Realm_Android Filterable - Fatal编程技术网

Android 如何在RealmRecyclServiceAdapter中实现filterable

Android 如何在RealmRecyclServiceAdapter中实现filterable,android,filter,android-recyclerview,realm,android-filterable,Android,Filter,Android Recyclerview,Realm,Android Filterable,我用的是well RealmRecyclServiceAdapter。我的问题是实现一个不起作用的可过滤。代码如下: private class AirportAdapter extends RealmRecyclerViewAdapter<AirportR,RecyclerView.ViewHolder> implements Filterable { Context context; OrderedRealmCollection<AirportR>l

我用的是well RealmRecyclServiceAdapter。我的问题是实现一个不起作用的
可过滤
。代码如下:

 private class AirportAdapter extends RealmRecyclerViewAdapter<AirportR,RecyclerView.ViewHolder> implements Filterable
{
    Context context;
    OrderedRealmCollection<AirportR>listAirports;

    public AirportAdapter(Context activity, OrderedRealmCollection<AirportR>airports)
    {
        super(activity,airports, true);
        this.context = activity;
        this.listAirports = airports;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
    {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.airport_show, parent,false);
        AirportClass holder = new AirportClass(view);
        return holder;

    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position)
    {
       AirportR airportR = listAirports.get(position);

        AirportClass mHolder = (AirportClass)holder;

        mHolder.country.setText(airportR.getIsoCountry());
        mHolder.name.setText(airportR.getName());
    }

    public Filter getFilter()
    {
       AirportFilter filter = new AirportFilter(this, listAirports);
        return filter;
    }


    private class AirportFilter extends Filter
    {
        private final AirportAdapter adapter;

        OrderedRealmCollection<AirportR>originalList;
        OrderedRealmCollection<AirportR>filteredList;


        private AirportFilter(AirportAdapter adapter, OrderedRealmCollection<AirportR> originalList)
        {
            super();
            this.adapter = adapter;
            this.originalList = originalList;

        }


        @Override
        protected FilterResults performFiltering(CharSequence constraint)
        {
            filteredList.clear();
            final FilterResults results = new FilterResults();

            if (constraint.length() == 0)
            {
                filteredList.addAll(originalList);
            }
            else
            {
                final String filterPattern = constraint.toString().toLowerCase().trim();

                for (final AirportR airportR : originalList)
                {
                    if (airportR.getName().toLowerCase().contains(filterPattern))
                    {
                        filteredList.add(airportR);
                    }
                }
            }
            results.values = filteredList;
            results.count = filteredList.size();
            return results;
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results)
        {
            adapter.listAirports.addAll((OrderedRealmCollection<AirportR>) results.values);
            adapter.notifyDataSetChanged();
        }
    }



    private class AirportClass extends RecyclerView.ViewHolder
    {
        TextView name, country;
        ImageView image;

        public AirportClass(View itemView)
        {
            super(itemView);

            name = (TextView)itemView.findViewById(R.id.name);
            country = (TextView)itemView.findViewById(R.id.country);
            image = (ImageView)itemView.findViewById(R.id.imageView);

        }
    }
}
过滤并更新适配器后,如何保存结果


谢谢

将筛选移动到
publishResults
,并使用UI线程领域的查询来评估新结果

private class AirportAdapter
        extends RealmRecyclerViewAdapter<AirportR, RecyclerView.ViewHolder>
        implements Filterable {
    Realm realm;

    public AirportAdapter(Context context, Realm realm, OrderedRealmCollection<AirportR> airports) {
        super(context, airports, true);
        this.realm = realm;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.airport_show, parent, false);
        AirportClass holder = new AirportClass(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        AirportR airportR = getData().get(position);

        AirportClass mHolder = (AirportClass) holder;
        mHolder.bind(airportR);
    }

    public void filterResults(String text) {
        text = text == null ? null : text.toLowerCase().trim();
        RealmQuery<AirportR> query = realm.where(AirportR.class);
        if(!(text == null || "".equals(text))) {
            query.contains("fieldToQueryBy", text, Case.INSENSITIVE) // TODO: change field
        }
        updateData(query.findAllAsync());
    }

    public Filter getFilter() {
        AirportFilter filter = new AirportFilter(this);
        return filter;
    }

    private class AirportFilter
            extends Filter {
        private final AirportAdapter adapter;

        private AirportFilter(AirportAdapter adapter) {
            super();
            this.adapter = adapter;
        }

        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            return new FilterResults();
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            adapter.filterResults(constraint.toString());
        }
    }

    private class AirportClass
            extends RecyclerView.ViewHolder {
        TextView name, country;
        ImageView image;

        public AirportClass(View itemView) {
            super(itemView);

            name = (TextView) itemView.findViewById(R.id.name);
            country = (TextView) itemView.findViewById(R.id.country);
            image = (ImageView) itemView.findViewById(R.id.imageView);
        }

        public void bind(AirportR airportR) {            
            country.setText(airportR.getIsoCountry());
            name.setText(airportR.getName());
        }
    }
}
专用类AirportAdapter
扩展RealmRecyclServiceAdapter
可过滤的{
境界;
公共AirportAdapter(上下文上下文、领域域、OrderedRealmCollection机场){
超级(上下文、机场、真实);
this.realm=领域;
}
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图=LayoutFlater.from(parent.getContext()).flate(R.layout.airport\u show,parent,false);
AirportClass holder=新的AirportClass(视图);
报税表持有人;
}
@凌驾
BindViewHolder上的公共无效(RecyclerView.ViewHolder,int位置){
AirportR AirportR=getData().get(位置);
AirportClass mHolder=(AirportClass)持有人;
mHolder.bind(机场);
}
公共无效筛选器结果(字符串文本){
text=text==null?null:text.toLowerCase().trim();
RealmQuery=realm.where(AirportR.class);
如果(!(text==null | |“”.equals(text))){
contains(“fieldToQueryBy”,文本,不区分大小写)//TODO:change字段
}
updateData(query.findAllAsync());
}
公共过滤器getFilter(){
AirportFilter过滤器=新的AirportFilter(此过滤器);
回流过滤器;
}
私有类AirportFilter
扩展过滤器{
专用最终机场适配器;
专用AirportFilter(AirportAdapter适配器){
超级();
this.adapter=适配器;
}
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
返回新的FilterResults();
}
@凌驾
受保护的void publishResults(CharSequence约束、FilterResults结果){
adapter.filterResults(constraint.toString());
}
}
私人类机场类
扩展RecyclerView.ViewHolder{
TextView名称、国家/地区;
图像视图图像;
公共机场类别(查看项目视图){
超级(项目视图);
name=(TextView)itemView.findViewById(R.id.name);
country=(TextView)itemView.findViewById(R.id.country);
image=(ImageView)itemView.findViewById(R.id.ImageView);
}
公共无效绑定(AirportR AirportR){
country.setText(airportR.getIsoCountry());
name.setText(airportR.getName());
}
}
}

在适配器中添加此选项,它可能会对您有所帮助

fun filterResults(text: String?, realm: Realm) {
    var text = text
    text = text?.toLowerCase()?.trim { it <= ' ' }
    val query = realm.where(YourObject::class.java)
    if (!(text == null || "" == text)) {
        query.contains("username", text, Case.INSENSITIVE).or().contains("username2", text, Case.INSENSITIVE)
    }
    updateData(query.findAllAsync()) // or findAll()
}
fun filterResults(文本:字符串?,领域:领域){
var text=text

text=text?.toLowerCase()?.trim{很高兴听到我可以简化您使用领域的方式:p@EpicPandaForce-你能给我看看最新的数据(列表机场)吗;如何在筛选之后和之前更新listview项?@user2269164这是来自@EpicPandaForce的RealmRecyclServiceAdapter方法-为listview实现的任何代码?@pentarex复制粘贴错误。甚至不应该存在。
fun filterResults(text: String?, realm: Realm) {
    var text = text
    text = text?.toLowerCase()?.trim { it <= ' ' }
    val query = realm.where(YourObject::class.java)
    if (!(text == null || "" == text)) {
        query.contains("username", text, Case.INSENSITIVE).or().contains("username2", text, Case.INSENSITIVE)
    }
    updateData(query.findAllAsync()) // or findAll()
}