使用嵌入式原生广告在 recyclerview 中实现搜索

Posted

技术标签:

【中文标题】使用嵌入式原生广告在 recyclerview 中实现搜索【英文标题】:implement search in recyclerview with embedded native ads 【发布时间】:2020-12-22 06:01:20 【问题描述】:

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

我在回收站视图 Reference:-

中将此用作嵌入广告的参考
 @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)

【问题讨论】:

【参考方案1】:

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

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);
    

【讨论】:

以上是关于使用嵌入式原生广告在 recyclerview 中实现搜索的主要内容,如果未能解决你的问题,请参考以下文章

当我滚动 Recyclerview 时,Admob 原生广告显示空白

Recyclerview - Facebook 原生广告 - 不可点击

如何在 RecyclerView 之间添加 Facebook Audience Network 原生广告

Google Admob原生广告

在 recyclerview 中实现 facebook 横幅广告

Facebook 原生广告未显示,错误“1011 - 显示格式不匹配”