#android #android-recyclerview #native-ads #android-filterable
#Android #android-recyclerview #нативная реклама #android-фильтруемый
Вопрос:
Я хочу реализовать поиск в представлении recycler, в котором я использую Object как класс в списке, потому что я встроил нативную рекламу внутри.
Я использовал это как ссылку на встроенную рекламу в представлении 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();
}
};
}
Я попытался использовать объект в качестве класса моей модели, но он выдал эту ошибку
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);
}
}