我想在我的viewPager中添加间隙广告,但一旦间隙广告关闭(或打开时),我就遇到了容器“消失”(或被销毁)的问题。一旦滑动,就会自动调用@Override方法“public void destructionitem(ViewGroup container,int position,Object Object)”,并调用间隙ad,但是,视图不会像未调用间隙ad时那样再次膨胀。
我的类扩展了PagerAdapter,我的一般设置如下:
@Override
public boolean isViewFromObject(View view, Object object) {
// TODO Auto-generated method stub
return view == ((RelativeLayout) object);
}
@Override
public Object instantiateItem(final ViewGroup container, final int position) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//instantiate TextViews, Buttons, ect (code not posted)
((ViewPager) container)
.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// the maximum position value is 130
// I want to display an interstitial ad every 7th position
if (position % 7 == 0) {
displayInterstitial();
}
}
@Override
public void onPageScrollStateChanged(int state) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrolled(int position,
float positionOffset, int positionOffsetPixels) {
// TODO Auto-generated method stub
}
});
if (interstitialLoad == false && isConnection == false) {
if (NetworkUtils.isConnected(context) == true
&& NetworkUtils.isNetworkActive(context) == true) {
isConnection = true;
// create an ad
interstitialAd = new InterstitialAd(context);
interstitialAd.setAdUnitId(AD_UNIT_ID_INT);
// request interstitial ads
AdRequest adRequestInterstitial = new AdRequest.Builder()
.build();
// begin loading interstitial
interstitialAd.loadAd(adRequestInterstitial);
}
}
if (isConnection = true) {
// Set the AdListener.
interstitialAd.setAdListener(new AdListener() {
@Override
public void onAdClosed() {
// do nothing
}
@Override
public void onAdLoaded() {
if (interstitialLoad == false) {
interstitialLoad = true;
}
}
@Override
public void onAdFailedToLoad(int errorCode) {
String message = String.format("onAdFailedToLoad (%s)",
getErrorReason(errorCode));
Log.e(TAG, message);
}
});
}
// add fragments to container (ViewPager)
((ViewPager) container).addView(itemView);
return itemView;
}
/** Gets a string error reason from an error code. */
private String getErrorReason(int errorCode) {
String errorReason = "";
switch (errorCode) {
case AdRequest.ERROR_CODE_INTERNAL_ERROR:
errorReason = "Internal error";
break;
case AdRequest.ERROR_CODE_INVALID_REQUEST:
errorReason = "Invalid request";
break;
case AdRequest.ERROR_CODE_NETWORK_ERROR:
errorReason = "Network Error";
break;
case AdRequest.ERROR_CODE_NO_FILL:
errorReason = "No fill";
break;
}
return errorReason;
}
// invoke displayInterstitial() when ready to display an interstitial
private void displayInterstitial() {
if (interstitialLoad == true && interstitialAd.isLoaded()) {
Log.e(TAG, "displayInterstitial()");
interstitialAd.show();
}
}
@Override
public void restoreState(Parcelable state, ClassLoader loader) {
// TODO Auto-generated method stub
super.restoreState(state, loader);
}
@Override
public Parcelable saveState() {
// TODO Auto-generated method stub
return super.saveState();
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager) container).removeView((RelativeLayout) object);
}
这是事情发生的顺序(假设我们在位置6(pg 6)):
1) 当我滑动到第7页时,首先会自动调用@Override destroyItem(ViewGroup container,int position,Object Object)方法。
2) 然后自动调用@Override onPageSelected(int position)方法,并显式调用displayInterstitual()方法。
3)从displayInterstiular()方法内部,显示间隙广告。此时,自动调用@Overder方法saveState()。
4) 作为“最终用户”,我单击“X”或按设备后退按钮关闭显示的广告。
5) 整个视图(或/和容器)将消失。我所期望的行为是调用@Override方法restoreState(),然后我仍然可以看到我的容器及其视图。
我怎样才能让一切都从间隙被调用和关闭之前停止的地方恢复过来?有人对如何解决这个问题有任何想法吗?提前感谢!
谢谢你的回答,丹和我想出了一个解决办法。我的问题是,在第一个广告显示并销毁后,我需要重新加载一个新广告。因此,我基本上在AdListener中重新实例化,我的冲突得到了解决。每7次滑动,无限显示广告单位。干杯
if (isConnection == true) {
// Set the AdListener.
interstitialAd.setAdListener(new AdListener() {
@Override
public void onAdClosed() {
// do nothing
Log.i(TAG, "onAdClosed()");
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
int layoutColorId = ElementStructure.arrayLayoutColor.get(position);
if (layoutColorId == 1) {
itemView = inflater.inflate(R.layout.frame_learn_a, container,
false);
} else if (layoutColorId == 2) {
itemView = inflater.inflate(R.layout.frame_learn_b, container,
false);
} else if (layoutColorId == 3) {
itemView = inflater.inflate(R.layout.frame_learn_c, container,
false);
} else if (layoutColorId == 4) {
itemView = inflater.inflate(R.layout.frame_learn_d, container,
false);
}
// reload interstitial ad
if (NetworkUtils.isConnected(context) == true
&& NetworkUtils.isNetworkActive(context) == true) {
Log.i(TAG, "Internet connection detected :: reload interstitial");
if (isConnection == false) {
isConnection = !isConnection;
}
// create an ad
interstitialAd = new InterstitialAd(context);
interstitialAd.setAdUnitId(AD_UNIT_ID_INT);
// request interstitial ads
AdRequest adRequestInterstitial = new AdRequest.Builder()
.build();
// begin loading interstitial
interstitialAd.loadAd(adRequestInterstitial);
}
}
@Override
public void onAdLoaded() {
if (interstitialLoad == false) {
Log.e(TAG, "onAdLoaded (interstitial)");
interstitialLoad = !interstitialLoad;
}
}
@Override
public void onAdFailedToLoad(int errorCode) {
String message = String.format("onAdFailedToLoad (%s)",
getErrorReason(errorCode));
Log.e(TAG, message);
}
});
}
可能与你的问题无关但是
if (isConnection = true) {
应该是:
if (isConnection == true) {
我有一个服务,它将在特定的时间点显示一个活动,在该活动之后,每13次我都显示一个admob插屏广告。当显示插屏广告时,我的应用程序的RAM使用量增加了20MB,之后它不会被垃圾收集。在接下来的13次显示另一个插屏广告时,服务内存没有增加。 我显示广告的代码: 我在以下堆栈溢出问题中尝试了一些解决方案,但没有任何解决方案对我有用。 Android Admob间内存泄漏 Android AdMob导致
嗨,伙计们,我的广告插页有问题。我在主活动中有一个横幅,但在另一个活动中,我想显示一个插页广告。横幅可以。。。我能看到这个!但间隙并没有显示。。。这是我的代码: } 我的UnitID是正确的:有一个logcat。 我在4.4.2中使用了模拟器,但我在物理设备上进行了尝试,但没有在中间位置使用广告,但在主活动中使用了小横幅! 我有GooglePlayService库...我的应用程序使用google
我想在Google Play的“专为家庭设计”类别中为儿童制作应用程序。据此:https://support.google.com/googleplay/android-developer/answer/6184502有两条规则: 不得使用广告墙 插播广告不得在应用程序启动后立即显示 请您解释一下如何使间质广告不全屏(不是广告墙)? 广告墙和插页广告有什么区别? 我曾经用过这个填隙词:https:
我想在一定的时间间隔后,在主要活动上添加一个间隙广告。我搜索,似乎没有参考代码这样做。感谢你的帮助我该怎么做?任何示例代码都将是有用的。多谢了。
我正在遵循本教程 到目前为止,当我点击按钮时,它就可以工作了。然而,我似乎无法让它在viewDidLoad上显示中间广告。 这就是我所拥有的: 控制台不断向我显示: 2016-02-04 22:27:51.855 GoogleAdamObjutorial[3394:56415]要获取此设备上的测试广告,请致电:request。testDevices=@[kGADSimulatorID]; 单击按钮
我成功地在我的应用程序中实现了AdMob中间广告,但唯一的问题是它们不可点击。 下面是我的AdMob.java类: 和MainPageActivity.java文件: 我不知道当用户升级并按下播放按钮(这将引导他进入下一个级别)时,该如何显示间隙广告。当他按下home键时,间隙广告就会出现,这会把他带到MainActivity屏幕上。 有人能帮我把广告点击一下吗?另外,有什么建议,如何添加的间隙广