如何将插页式广告放入适配器 class?
How to put an Interstital Ad inside an adapter class?
我在 MainActivity
中有一个 ViewPager
,当您触摸适配器内的每个图像时,它会打开一个新的 Activity
。
有人知道如何在加载这些新活动之前展示广告吗?
如您所见,我有一个名为 CustomSwipeAdapterCovers
的适配器,它负责打开新活动,并在 MainActivity
中显示广告是如何加载的,但我不知道如何在非活动上实施广告。
public class MainActivity extends AppCompatActivity {
private static final int START_LEVEL = 1;
private int mLevel;
private Button mNextLevelButton;
private InterstitialAd mInterstitialAd;
private TextView mLevelTextView;
private ViewPager viewPager;
private CustomSwipeAdapterCapas adapter;
//=================================
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Create the next level button, which tries to show an interstitial when clicked.
mNextLevelButton = ((Button) findViewById(R.id.next_level_button));
mNextLevelButton.setEnabled(false);
mNextLevelButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showInterstitial();
}
});
// Create the text view to show the level number.
mLevelTextView = (TextView) findViewById(R.id.level);
mLevel = START_LEVEL;
// Create the InterstitialAd and set the adUnitId (defined in values/strings.xml).
mInterstitialAd = newInterstitialAd();
loadInterstitial();
// Toasts the test ad message on the screen. Remove this after defining your own ad unit ID.
Toast.makeText(this, TOAST_TEXT, Toast.LENGTH_LONG).show();
viewPager = findViewById(R.id.viewpager_main_xml);
adapter = new CustomSwipeAdapterCapas(this);
viewPager.setAdapter(adapter);
}
//=====================================
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onStop() {
super.onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
@Override
protected void onRestart() {
super.onRestart();
}
private InterstitialAd newInterstitialAd() {
InterstitialAd interstitialAd = new InterstitialAd(this);
interstitialAd.setAdUnitId(getString(R.string.interstitial_ad_unit_id));
interstitialAd.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
mNextLevelButton.setEnabled(true);
}
@Override
public void onAdFailedToLoad(int errorCode) {
mNextLevelButton.setEnabled(true);
}
@Override
public void onAdClosed() {
// Proceed to the next level.
goToNextLevel();
}
});
return interstitialAd;
}
private void showInterstitial() {
// Show the ad if it's ready. Otherwise toast and reload the ad.
if (mInterstitialAd != null && mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
} else {
Toast.makeText(this, "Ad did not load", Toast.LENGTH_SHORT).show();
goToNextLevel();
}
}
private void loadInterstitial() {
// Disable the next level button and load the ad.
mNextLevelButton.setEnabled(false);
AdRequest adRequest = new AdRequest.Builder()
.setRequestAgent("android_studio:ad_template").build();
mInterstitialAd.loadAd(adRequest);
}
private void goToNextLevel() {
// Show the next level and reload the ad to prepare for the level after.
mLevelTextView.setText("Level " + (++mLevel));
mInterstitialAd = newInterstitialAd();
loadInterstitial();
}
}
public class CustomSwipeAdapterCovers extends PagerAdapter {
private int[] BookCovers = { R.drawable.cover_1,
R.drawable.cover_2,
R.drawable.cover_3,
R.drawable.capa_4,
R.drawable.capa_5,
R.drawable.capa_6,
R.drawable.capa_7,
R.drawable.capa_8,
R.drawable.capa_9,
R.drawable.capa_10,
R.drawable.capa_11,
R.drawable.capa_12,};
private Context context;
private LayoutInflater layoutInflater;
public CustomSwipeAdapterCapas(Context context){
this.context = context;
}
@Override
public int getCount() {
return capasLivros.length;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return (view == (LinearLayout) object);
}
@Override
public Object instantiateItem(final ViewGroup container, final int position) {
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View item_view = layoutInflater.inflate(R.layout.capas_layout, container, false);
ImageButton imageButton = item_view.findViewById(R.id.imagebutton_main_xml);
imageButton.setImageResource(BookCovers[position]);
imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if( position == 0){
Intent intent = new Intent(v.getContext(), LivroUmActivity.class);
v.getContext().startActivity(intent);
} else if(position == 1){
Intent intent = new Intent(v.getContext(), LivroDoisActivity.class);
v.getContext().startActivity(intent);
} else if(position == 2){
Intent intent = new Intent(v.getContext(), LivroTresActivity.class);
v.getContext().startActivity(intent);
} else if(position == 3){
Intent intent = new Intent(v.getContext(), LivroQuatroActivity.class);
v.getContext().startActivity(intent);
} else if(position == 4){
Intent intent = new Intent(v.getContext(), LivroCincoActivity.class);
v.getContext().startActivity(intent);
} else if(position == 5){
Intent intent = new Intent(v.getContext(), LivroSeisActivity.class);
v.getContext().startActivity(intent);
} else if(position == 6){
Intent intent = new Intent(v.getContext(), LivroSeteActivity.class);
v.getContext().startActivity(intent);
} else if(position == 7){
Intent intent = new Intent(v.getContext(), LivroOitoActivity.class);
v.getContext().startActivity(intent);
} else if(position == 8){
Intent intent = new Intent(v.getContext(), LivroNoveActivity.class);
v.getContext().startActivity(intent);
} else if(position == 9){
Intent intent = new Intent(v.getContext(), LivroDezActivity.class);
v.getContext().startActivity(intent);
} else if(position == 10){
Intent intent = new Intent(v.getContext(), LivroOnzeActivity.class);
v.getContext().startActivity(intent);
} else if(position == 11){
Intent intent = new Intent(v.getContext(), LivroDozeActivity.class);
v.getContext().startActivity(intent);
}
}
});
container.addView(item_view);
return item_view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((LinearLayout) object);
//super.destroyItem(container, position, object);
}
我也遇到过同样的问题。
在您的情况下,不是从适配器 activity 打开插页式广告,而是从适配器 activity 的下一个 activity 打开它。
以下是我的解决方案:
将 Activity_B 视为您的适配器 activity.
假设有3个活动,开启顺序如下:
Activity_A --> Activity_B --> Activity_C.
现在我想在 Activity_B
和 Activity_C
之间显示插页式广告。
我先在Activity_A中加载了Interstitial Ad,然后在Activity_C
中调用(或显示)。
你可以这样做:
在Activity_A即MainActivity中添加如下代码:
public void showme(){
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId(getString(R.string.interstitial_full_screen));
AdRequest adRequest = new AdRequest.Builder()
.build();
mInterstitialAd.loadAd(adRequest);
mInterstitialAd.setAdListener(new AdListener()
{
@Override
public void onAdClosed()
{
//reload interstitial
AdRequest adRequest = new AdRequest.Builder()
// .addTestDevice("YOUR_DEVICE_ID")
.build();
mInterstitialAd.loadAd(adRequest);
}
});
}
public static void showInterstitial() {
if (mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
}
}
在 OnCreate 中的 Activity_A 中调用此 showme()。
在 Activity_C 中将下面的代码粘贴到 OnCreate 中:
Activity_A.showInterstitial();
此外,此方法不违反任何 Google Admob 关于插页式广告和横幅广告的政策。
你应该喜欢下面的代码....
在顶部的适配器 class 中声明此代码...
private InterstitialAd mInterstitialAd;
在此之后,您将其余代码放入 onBindViewHolder()
@Override
public void onBindViewHolder(@NonNull MyHolder holder, final int position) {
Picasso.get()
.load(picsArray[position])
.into(holder.imageView);
mInterstitialAd = new InterstitialAd(context);
mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
mInterstitialAd.loadAd(new AdRequest.Builder().build());
mInterstitialAd.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
// Code to be executed when an ad finishes loading.
}
@Override
public void onAdFailedToLoad(int errorCode) {
// Code to be executed when an ad request fails.
}
@Override
public void onAdOpened() {
// Code to be executed when the ad is displayed.
}
@Override
public void onAdLeftApplication() {
// Code to be executed when the user has left the app.
}
@Override
public void onAdClosed() {
Intent intent = new Intent(context, Full_Image_Activity.class);
intent.putExtra("IMG",picsArray[position]);
context.startActivity(intent);
///// onAdClosed() 方法,您可以输入您的意图或您想要的任何内容,这是为了当您关闭添加时,意图必须知道该做什么...
}
});
}
在此之后,您可以将代码放入您的 item.onClicklistner 方法中,如下所示。
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
} else {
Intent intent = new Intent(context, Full_Image_Activity.class);
intent.putExtra("IMG",picsArray[getAdapterPosition()]);
context.startActivity(intent);
}
}
});
在 else{} 中,您可以将代码放入意图或任何您想做的事情...
希望它对很多人有用...
我在 MainActivity
中有一个 ViewPager
,当您触摸适配器内的每个图像时,它会打开一个新的 Activity
。
有人知道如何在加载这些新活动之前展示广告吗?
如您所见,我有一个名为 CustomSwipeAdapterCovers
的适配器,它负责打开新活动,并在 MainActivity
中显示广告是如何加载的,但我不知道如何在非活动上实施广告。
public class MainActivity extends AppCompatActivity {
private static final int START_LEVEL = 1;
private int mLevel;
private Button mNextLevelButton;
private InterstitialAd mInterstitialAd;
private TextView mLevelTextView;
private ViewPager viewPager;
private CustomSwipeAdapterCapas adapter;
//=================================
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Create the next level button, which tries to show an interstitial when clicked.
mNextLevelButton = ((Button) findViewById(R.id.next_level_button));
mNextLevelButton.setEnabled(false);
mNextLevelButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showInterstitial();
}
});
// Create the text view to show the level number.
mLevelTextView = (TextView) findViewById(R.id.level);
mLevel = START_LEVEL;
// Create the InterstitialAd and set the adUnitId (defined in values/strings.xml).
mInterstitialAd = newInterstitialAd();
loadInterstitial();
// Toasts the test ad message on the screen. Remove this after defining your own ad unit ID.
Toast.makeText(this, TOAST_TEXT, Toast.LENGTH_LONG).show();
viewPager = findViewById(R.id.viewpager_main_xml);
adapter = new CustomSwipeAdapterCapas(this);
viewPager.setAdapter(adapter);
}
//=====================================
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onStop() {
super.onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
@Override
protected void onRestart() {
super.onRestart();
}
private InterstitialAd newInterstitialAd() {
InterstitialAd interstitialAd = new InterstitialAd(this);
interstitialAd.setAdUnitId(getString(R.string.interstitial_ad_unit_id));
interstitialAd.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
mNextLevelButton.setEnabled(true);
}
@Override
public void onAdFailedToLoad(int errorCode) {
mNextLevelButton.setEnabled(true);
}
@Override
public void onAdClosed() {
// Proceed to the next level.
goToNextLevel();
}
});
return interstitialAd;
}
private void showInterstitial() {
// Show the ad if it's ready. Otherwise toast and reload the ad.
if (mInterstitialAd != null && mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
} else {
Toast.makeText(this, "Ad did not load", Toast.LENGTH_SHORT).show();
goToNextLevel();
}
}
private void loadInterstitial() {
// Disable the next level button and load the ad.
mNextLevelButton.setEnabled(false);
AdRequest adRequest = new AdRequest.Builder()
.setRequestAgent("android_studio:ad_template").build();
mInterstitialAd.loadAd(adRequest);
}
private void goToNextLevel() {
// Show the next level and reload the ad to prepare for the level after.
mLevelTextView.setText("Level " + (++mLevel));
mInterstitialAd = newInterstitialAd();
loadInterstitial();
}
}
public class CustomSwipeAdapterCovers extends PagerAdapter {
private int[] BookCovers = { R.drawable.cover_1,
R.drawable.cover_2,
R.drawable.cover_3,
R.drawable.capa_4,
R.drawable.capa_5,
R.drawable.capa_6,
R.drawable.capa_7,
R.drawable.capa_8,
R.drawable.capa_9,
R.drawable.capa_10,
R.drawable.capa_11,
R.drawable.capa_12,};
private Context context;
private LayoutInflater layoutInflater;
public CustomSwipeAdapterCapas(Context context){
this.context = context;
}
@Override
public int getCount() {
return capasLivros.length;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return (view == (LinearLayout) object);
}
@Override
public Object instantiateItem(final ViewGroup container, final int position) {
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View item_view = layoutInflater.inflate(R.layout.capas_layout, container, false);
ImageButton imageButton = item_view.findViewById(R.id.imagebutton_main_xml);
imageButton.setImageResource(BookCovers[position]);
imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if( position == 0){
Intent intent = new Intent(v.getContext(), LivroUmActivity.class);
v.getContext().startActivity(intent);
} else if(position == 1){
Intent intent = new Intent(v.getContext(), LivroDoisActivity.class);
v.getContext().startActivity(intent);
} else if(position == 2){
Intent intent = new Intent(v.getContext(), LivroTresActivity.class);
v.getContext().startActivity(intent);
} else if(position == 3){
Intent intent = new Intent(v.getContext(), LivroQuatroActivity.class);
v.getContext().startActivity(intent);
} else if(position == 4){
Intent intent = new Intent(v.getContext(), LivroCincoActivity.class);
v.getContext().startActivity(intent);
} else if(position == 5){
Intent intent = new Intent(v.getContext(), LivroSeisActivity.class);
v.getContext().startActivity(intent);
} else if(position == 6){
Intent intent = new Intent(v.getContext(), LivroSeteActivity.class);
v.getContext().startActivity(intent);
} else if(position == 7){
Intent intent = new Intent(v.getContext(), LivroOitoActivity.class);
v.getContext().startActivity(intent);
} else if(position == 8){
Intent intent = new Intent(v.getContext(), LivroNoveActivity.class);
v.getContext().startActivity(intent);
} else if(position == 9){
Intent intent = new Intent(v.getContext(), LivroDezActivity.class);
v.getContext().startActivity(intent);
} else if(position == 10){
Intent intent = new Intent(v.getContext(), LivroOnzeActivity.class);
v.getContext().startActivity(intent);
} else if(position == 11){
Intent intent = new Intent(v.getContext(), LivroDozeActivity.class);
v.getContext().startActivity(intent);
}
}
});
container.addView(item_view);
return item_view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((LinearLayout) object);
//super.destroyItem(container, position, object);
}
我也遇到过同样的问题。 在您的情况下,不是从适配器 activity 打开插页式广告,而是从适配器 activity 的下一个 activity 打开它。 以下是我的解决方案: 将 Activity_B 视为您的适配器 activity.
假设有3个活动,开启顺序如下:
Activity_A --> Activity_B --> Activity_C.
现在我想在
Activity_B
和Activity_C
之间显示插页式广告。我先在Activity_A中加载了Interstitial Ad,然后在
Activity_C
中调用(或显示)。
你可以这样做:
在Activity_A即MainActivity中添加如下代码:
public void showme(){
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId(getString(R.string.interstitial_full_screen));
AdRequest adRequest = new AdRequest.Builder()
.build();
mInterstitialAd.loadAd(adRequest);
mInterstitialAd.setAdListener(new AdListener()
{
@Override
public void onAdClosed()
{
//reload interstitial
AdRequest adRequest = new AdRequest.Builder()
// .addTestDevice("YOUR_DEVICE_ID")
.build();
mInterstitialAd.loadAd(adRequest);
}
});
}
public static void showInterstitial() {
if (mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
}
}
在 OnCreate 中的 Activity_A 中调用此 showme()。
在 Activity_C 中将下面的代码粘贴到 OnCreate 中:
Activity_A.showInterstitial();
此外,此方法不违反任何 Google Admob 关于插页式广告和横幅广告的政策。
你应该喜欢下面的代码.... 在顶部的适配器 class 中声明此代码... private InterstitialAd mInterstitialAd;
在此之后,您将其余代码放入 onBindViewHolder()
@Override
public void onBindViewHolder(@NonNull MyHolder holder, final int position) {
Picasso.get()
.load(picsArray[position])
.into(holder.imageView);
mInterstitialAd = new InterstitialAd(context);
mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
mInterstitialAd.loadAd(new AdRequest.Builder().build());
mInterstitialAd.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
// Code to be executed when an ad finishes loading.
}
@Override
public void onAdFailedToLoad(int errorCode) {
// Code to be executed when an ad request fails.
}
@Override
public void onAdOpened() {
// Code to be executed when the ad is displayed.
}
@Override
public void onAdLeftApplication() {
// Code to be executed when the user has left the app.
}
@Override
public void onAdClosed() {
Intent intent = new Intent(context, Full_Image_Activity.class);
intent.putExtra("IMG",picsArray[position]);
context.startActivity(intent);
///// onAdClosed() 方法,您可以输入您的意图或您想要的任何内容,这是为了当您关闭添加时,意图必须知道该做什么... } });
}
在此之后,您可以将代码放入您的 item.onClicklistner 方法中,如下所示。
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
} else {
Intent intent = new Intent(context, Full_Image_Activity.class);
intent.putExtra("IMG",picsArray[getAdapterPosition()]);
context.startActivity(intent);
}
}
});
在 else{} 中,您可以将代码放入意图或任何您想做的事情... 希望它对很多人有用...