android - 使用嵌入式原生广告在 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)
解决方案
您的列表包含新闻和广告。因此,您应该在使用之前控制您的项目类型。
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);
}
}
推荐阅读
- tfs - TFS PBI/Bug 状态 - 当所有任务都设置为 Done 或 Removed 时
- javascript - ASP.NET Core 如何在发布中删除特定的 CSS 和 JavaScript 文件
- angular - 使用 angular-google-maps 动态添加语言/区域设置?
- audio - GStreamer - 从 MP4 文件生成音频波形
- linux - 从文件的特定行执行命令
- c++ - 在编译行中添加“-march=native”英特尔编译器标志会导致 KNL 上的浮点异常
- java - Informix 时序表的批量插入
- c++ - 如何提高多相机设置的写入速度?
- matlab - MATLAB AppDesign:跟踪 ListBox 双击
- docker - /var/run/docker.sock:没有这样的文件或目录