Если мой пост выглядит очень неорганизованным, пожалуйста, поймите, потому что я не публиковал здесь ранее. Если что-то отсутствует, дайте мне знать, чтобы я мог добавить его соответственно.
Я пробовал разные подходы здесь и в Google, но реклама либо удаляет элемент в программе утилизации (например, у меня есть пять городов до размещения рекламы, но когда я добавляю добавление после каждых трех элементов, город, который должен быть в третья позиция исчезает и заменяется надстройкой, после чего, когда я обновляю sh список, объявления становятся двумя рядом друг с другом). Я хотел бы попросить вас экспертов взглянуть на мой класс адаптера и порекомендовать, как я должен размещать рекламу после каждых трех пунктов повторного просмотра:
Ниже мой адаптер. Я использую этот пример
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Filter;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
public class AdapterCity extends RecyclerView.Adapter<AdapterCity.MyViewHolder> {
private ArrayList<ItemCity> arraylist;
private ArrayList<ItemCity> filteredArrayList;
private NameFilter filter;
private CityClickListener cityClickListener;
private Methods methods;
private SharedPref sharedPref;
public AdapterCity(Context context, ArrayList<ItemCity> list, CityClickListener cityClickListener) {
this.arraylist = list;
this.filteredArrayList = list;
this.cityClickListener = cityClickListener;
methods = new Methods(context, interAdListener);
sharedPref = new SharedPref(context);
}
class MyViewHolder extends RecyclerView.ViewHolder {
private TextView textView_title;
private ConstraintLayout ll;
private MyViewHolder(View view) {
super(view);
ll = view.findViewById(R.id.ll);
textView_title = view.findViewById(R.id.textView_cityname);
}
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.layout_citylist, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull final MyViewHolder holder, int position) {
holder.textView_title.setText(arraylist.get(position).getName());
holder.ll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
methods.showInter(holder.getAdapterPosition(), "");
}
});
}
@Override
public int getItemCount() {
return arraylist.size();
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
return 0;
}
private String getID(int pos) {
return arraylist.get(pos).getId();
}
public Filter getFilter() {
if (filter == null) {
filter = new NameFilter();
}
return filter;
}
private class NameFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
constraint = constraint.toString().toLowerCase();
FilterResults result = new FilterResults();
if (constraint.toString().length() > 0) {
ArrayList<ItemCity> filteredItems = new ArrayList<>();
for (int i = 0, l = filteredArrayList.size(); i < l; i++) {
String nameList = filteredArrayList.get(i).getName();
if (nameList.toLowerCase().contains(constraint))
filteredItems.add(filteredArrayList.get(i));
}
result.count = filteredItems.size();
result.values = filteredItems;
} else {
synchronized (this) {
result.values = filteredArrayList;
result.count = filteredArrayList.size();
}
}
return result;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
arraylist = (ArrayList<ItemCity>) results.values;
notifyDataSetChanged();
}
}
private void loadCityRadio(int pos) {
int reali = getPosition(getID(pos));
Constants.itemCity = arraylist.get(reali);
cityClickListener.onClick();
}
private int getPosition(String id) {
int count = 0;
int rid = Integer.parseInt(id);
for (int i = 0; i < arraylist.size(); i++) {
try {
if (rid == Integer.parseInt(arraylist.get(i).getId())) {
count = i;
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
return count;
}
private InterAdListener interAdListener = new InterAdListener() {
@Override
public void onClick(int position, String type) {
loadCityRadio(position);
}
};
}
Ниже приведен мой класс ItemCity, используемый для получения идентификатора и имени города
public class ItemCity {
private String id;
private String name;
public ItemCity(String id, String name, String tagLine) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
}
Это последняя версия моего класса Adapter, плохо размещает рекламу в моем репортере
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Filter;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.gms.ads.AdRequest;
import java.util.ArrayList;
public class AdapterCityTestAds extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private ArrayList<ItemCity> arraylist;
private ArrayList<ItemCity> filteredArrayList;
private NameFilter filter;
private CityClickListener cityClickListener;
private Methods methods;
private SharedPref sharedPref;
/*Added for Ads*/
private static final int MENU_ITEM_VIEW_TYPE = 0;
private static final int BANNER_AD_VIEW_TYPE = 1;
public AdapterCityTestAds (Context context, ArrayList<ItemCity> list, CityClickListener cityClickListener) {
this.arraylist = list;
this.filteredArrayList = list;
this.cityClickListener = cityClickListener;
methods = new Methods(context, interAdListener);
sharedPref = new SharedPref(context);
}
class MenuItemViewHolder extends RecyclerView.ViewHolder {
private TextView textView_title;
private ConstraintLayout ll;
private MenuItemViewHolder(View view) {
super(view);
ll = view.findViewById(R.id.ll);
textView_title = view.findViewById(R.id.textView_cityname);
}
}
public class AdViewHolder extends RecyclerView.ViewHolder {
private LinearLayout ll_adView;
AdViewHolder(View view) {
super(view);
ll_adView = view.findViewById(R.id.ll_adView);
}
}
@Override
public int getItemCount() {
return arraylist.size();
}
/**
* Determines the view type for the given position.
*/
@Override
public int getItemViewType(int position) {
return (position % Constants.ADSINLISTITEM == 0) ? BANNER_AD_VIEW_TYPE
: MENU_ITEM_VIEW_TYPE;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
switch (viewType) {
case MENU_ITEM_VIEW_TYPE:
View menuItemLayoutView = LayoutInflater.from(viewGroup.getContext()).inflate(
R.layout.layout_citylist, viewGroup, false);
return new MenuItemViewHolder(menuItemLayoutView);
case BANNER_AD_VIEW_TYPE:
// fall through
default:
View addView = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.banner_ad_container, viewGroup, false);
return new AdViewHolder(addView);
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
int viewType = getItemViewType(position);
switch (viewType) {
case MENU_ITEM_VIEW_TYPE:
MenuItemViewHolder menuItemHolder = (MenuItemViewHolder) holder;
ItemCity itemCity = (ItemCity) arraylist.get(position);
menuItemHolder.textView_title.setText(itemCity.getName());
menuItemHolder.ll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
methods.showInter((position), "");
}
});
break;
case BANNER_AD_VIEW_TYPE:
// fall through
default:
AdViewHolder bannerHolder = (AdViewHolder) holder;
//AdView adView = (AdView) arraylist.get(position);
//ViewGroup adCardView = (ViewGroup) bannerHolder.itemView;
AdRequest adRequest = new AdRequest.Builder().build();
if (bannerHolder.ll_adView.getChildCount() > 0) {
bannerHolder.ll_adView.removeAllViews();
}
if (bannerHolder.ll_adView.getParent() != null) {
((ViewGroup) bannerHolder.ll_adView.getParent()).removeView(bannerHolder.ll_adView);
}
// Add the banner ad to the ad view.
methods.showLargeBannerAd(bannerHolder.ll_adView);
}
}
@Override
public long getItemId(int position) {
return position;
}
private String getID(int pos) {
return arraylist.get(pos).getId();
}
public Filter getFilter() {
if (filter == null) {
filter = new NameFilter();
}
return filter;
}
private class NameFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
constraint = constraint.toString().toLowerCase();
FilterResults result = new FilterResults();
if (constraint.toString().length() > 0) {
ArrayList<ItemCity> filteredItems = new ArrayList<>();
for (int i = 0, l = filteredArrayList.size(); i < l; i++) {
String nameList = filteredArrayList.get(i).getName();
if (nameList.toLowerCase().contains(constraint))
filteredItems.add(filteredArrayList.get(i));
}
result.count = filteredItems.size();
result.values = filteredItems;
} else {
synchronized (this) {
result.values = filteredArrayList;
result.count = filteredArrayList.size();
}
}
return result;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
arraylist = (ArrayList<ItemCity>) results.values;
notifyDataSetChanged();
}
}
private void loadCityRadio(int pos) {
int reali = getPosition(getID(pos));
Constants.itemCity = arraylist.get(reali);
cityClickListener.onClick();
}
private int getPosition(String id) {
int count = 0;
int rid = Integer.parseInt(id);
for (int i = 0; i < arraylist.size(); i++) {
try {
if (rid == Integer.parseInt(arraylist.get(i).getId())) {
count = i;
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
return count;
}
private InterAdListener interAdListener = new InterAdListener() {
@Override
public void onClick(int position, String type) {
loadCityRadio(position);
}
};
}