首页 > 解决方案 > 使用嵌入式原生广告在 recyclerview 中实现搜索

问题描述

我想在回收站视图中实现搜索,在该视图中我使用对象作为列表中的类,因为我在其中嵌入了原生广告。

我将其用作回收站视图参考中嵌入广告的参考:-

 @Override
public Filter getFilter() {
    return new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            String key = constraint.toString();
            if (key.isEmpty()){
                mDataFiltered = mData;
            }else{
                List<Object> isFiltered = new ArrayList<>();
                for ( Object n : mData){
                    if (((News) n).getName().toLowerCase().contains(key.toLowerCase())){ //throw error at this line
                        isFiltered.add(n);
                    }
                }
                mDataFiltered = isFiltered;
            }

            FilterResults filterResults = new FilterResults();
            filterResults.values = mDataFiltered;
            return filterResults;
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            mDataFiltered = (List<Object>) results.values;
            notifyDataSetChanged();
        }
    };
}

我尝试将 Object 转换为我的模型类,但它给出了这个错误

java.lang.ClassCastException: com.google.android.gms.internal.ads.zzafx cannot be cast to com.jamuitoday.model.News
    at com.jamuitoday.adapter.RAdapter$1.performFiltering(RAdapter.java:211)
    at android.widget.Filter$RequestHandler.handleMessage(Filter.java:236)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:223)
    at android.os.HandlerThread.run(HandlerThread.java:67)

标签: androidandroid-recyclerviewnative-adsandroid-filterable

解决方案


您的列表包含新闻和广告。因此,您应该在使用之前控制您的项目类型。

if (((News) n).getName().toLowerCase().contains(key.toLowerCase())){ //throw error at this line
    isFiltered.add(n);
}

更改此代码如下:

if(n.getItemViewType(mData.indexOf(n)) == 0){ //MENU_ITEM_VIEW_TYPE
    if (((News) n).getName().toLowerCase().contains(key.toLowerCase())){
        isFiltered.add(n);
    }
}

推荐阅读