Created
December 11, 2023 15:29
-
-
Save tomleejumah/586fa25ba5c06c4d517cd1f1cb074ba1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.leeStream.Sporty.Adapter; | |
import android.app.Activity; | |
import android.content.Context; | |
import android.content.Intent; | |
import android.os.Handler; | |
import android.util.Log; | |
import android.view.LayoutInflater; | |
import android.view.View; | |
import android.view.ViewGroup; | |
import android.widget.TextView; | |
import android.widget.Toast; | |
import androidx.annotation.NonNull; | |
import androidx.recyclerview.widget.RecyclerView; | |
import com.google.android.gms.ads.AdError; | |
import com.google.android.gms.ads.AdRequest; | |
import com.google.android.gms.ads.AdView; | |
import com.google.android.gms.ads.FullScreenContentCallback; | |
import com.google.android.gms.ads.interstitial.InterstitialAd; | |
import com.leeStream.Sporty.Interface.AdCallback; | |
import com.leeStream.Sporty.Games; | |
import com.leeStream.Sporty.Models.LeagueItem; | |
import com.leeStream.Sporty.R; | |
import com.leeStream.Sporty.Screen; | |
import com.leeStream.Sporty.Utils.NetworkUtils; | |
import java.util.List; | |
public class LeaguesAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { | |
private static final int VIEW_TYPE_CONTENT = 0; | |
private static final int VIEW_TYPE_AD = 1; | |
private final Context mContext; | |
private AdCallback adCallback; | |
private final List<LeagueItem> mLeague; | |
private InterstitialAd mInterstitialAd; | |
private boolean isLeaguesData; | |
public LeaguesAdapter(Context mContext, List<LeagueItem> mLeague) { | |
this.mContext = mContext; | |
this.mLeague = mLeague; | |
} | |
public void setInterstitialAd(InterstitialAd interstitialAd) { | |
this.mInterstitialAd = interstitialAd; | |
} | |
@NonNull | |
@Override | |
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { | |
LayoutInflater inflater = LayoutInflater.from(parent.getContext()); | |
if (viewType == VIEW_TYPE_CONTENT) { | |
View contentView = inflater.inflate(R.layout.league_item, parent, false); | |
return new ContentViewHolder(contentView); | |
} else { | |
View adView = inflater.inflate(R.layout.banner_ad_layout, parent, false); | |
return new AdViewHolder(adView); | |
} | |
} | |
@Override | |
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { | |
if (holder.getItemViewType() == VIEW_TYPE_CONTENT) { | |
LeagueItem leagueItem = mLeague.get(position); | |
ContentViewHolder contentViewHolder = (ContentViewHolder) holder; | |
contentViewHolder.leagueName1.setText(leagueItem.getLeague()); | |
contentViewHolder.itemView.setOnClickListener(view -> { | |
if (adCallback != null) { | |
adCallback.startLottieAnimation(); | |
} | |
new Handler().postDelayed(() -> { | |
{ | |
if (mInterstitialAd != null) { | |
mInterstitialAd.show((Activity) mContext); | |
mInterstitialAd.setFullScreenContentCallback(new FullScreenContentCallback() { | |
@Override | |
public void onAdDismissedFullScreenContent() { | |
//loading nextActivity when interstitial ad is closed by user | |
if (isLeaguesData) { | |
openNextActivity(position, Games.class); | |
} else { | |
openNextActivity(position, Screen.class); | |
} | |
} | |
@Override | |
public void onAdShowedFullScreenContent() { | |
if (adCallback != null) { | |
adCallback.onAdDismissed(); | |
} | |
} | |
@Override | |
public void onAdFailedToShowFullScreenContent(@NonNull AdError adError) { | |
if (isLeaguesData) { | |
openNextActivity(position, Games.class); | |
} else { | |
openNextActivity(position, Screen.class); | |
} | |
} | |
}); | |
} else { | |
Log.d("InterstitialAd", "Failed to Display"); | |
if (isLeaguesData) { | |
openNextActivity(position, Games.class); | |
} else { | |
openNextActivity(position, Screen.class); | |
} | |
} | |
} | |
}, 4000); | |
}); | |
} else { | |
AdViewHolder adViewHolder = (AdViewHolder) holder; | |
AdRequest adRequest = new AdRequest.Builder().build(); | |
adViewHolder.adView.loadAd(adRequest); | |
} | |
} | |
public void checkIfLeaguesData(boolean isLeaguesData) { | |
this.isLeaguesData = isLeaguesData; | |
notifyDataSetChanged(); | |
} | |
void openNextActivity(int position, Class<?> targetClass) { | |
if (NetworkUtils.isNetworkConnected(mContext)) { | |
Intent intent = new Intent(mContext, targetClass); | |
String tag = String.valueOf(mLeague.get(position).getLeague()); | |
String link = String.valueOf(mLeague.get(position).getLink()); | |
intent.putExtra("League", tag); | |
intent.putExtra("link", link); | |
mContext.startActivity(intent); | |
if (adCallback != null) { | |
adCallback.onAdDismissed(); | |
Log.d("YourAdapter", "onAdDismissed callback called."); | |
} | |
} else { | |
Toast.makeText(mContext, "you are not connected to the internet", Toast.LENGTH_SHORT).show(); | |
} | |
} | |
@Override | |
public int getItemViewType(int position) { | |
int viewType = (position % 3 == 0) ? VIEW_TYPE_AD : VIEW_TYPE_CONTENT; | |
Log.d("LeaguesAdapter", "Position: " + position + ", ViewType: " + viewType); | |
return viewType; | |
} | |
@Override | |
public int getItemCount() { | |
if (mLeague != null) { | |
return mLeague.size(); | |
} else { | |
return 0; | |
} | |
} | |
public static class ContentViewHolder extends RecyclerView.ViewHolder { | |
private final TextView leagueName1; | |
public ContentViewHolder(@NonNull View itemView) { | |
super(itemView); | |
leagueName1 = itemView.findViewById(R.id.txtLeague); | |
//TODO implement image view for the league | |
} | |
} | |
public static class AdViewHolder extends RecyclerView.ViewHolder { | |
private final AdView adView; | |
public AdViewHolder(@NonNull View itemView) { | |
super(itemView); | |
adView = itemView.findViewById(R.id.adView1); | |
} | |
} | |
} |
@Ttoml33 You can check minimum size of your original content list of it's less then 2 then don't add ad view in list.
For odds issue, I guess you will alter your original list and add ad view in specific index correct?
So, add one condition for last index also.
@Ttoml33 I've added this file in another project and push code. Please visit
https://github.com/HarshaliSachani/AndroidAppsCollection/blob/main/app/src/main/java/com/map/androidappcollections/activities/RecyclerViewWithAdsActivity.kt
You can set adview with dynamic size of list (odd/even)
Hope it will help to solve your problem.
@HarshaliSachani thank you
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@HarshaliSachani The expected output is that the ad should display after 2 RecyclerView Items ie 110220330 in that pattern but the behaviour is :
a) if im having only one item,it only shows the ad and not the item so the output is (0 and the expected is 1 since its only an item)...this behaviois also noticeable if im having 3 items the output is (110) and not (1101). SO basically its only working with even and not odds
N/B : im using the 0 to represent the ads postion and 1 the items in my recyclerview.