帮助我,stackoverflow,你是我唯一的希望。我想创建一个Android动态壁纸,在壁纸的偏好活动中显示广告。我几乎被下面这个例子中得到了这个工作:Android:AdView并不总是通过CreateView在首选项中显示
Android Admob advert in PreferenceActivity
这工作得很好,但是这个示例使用OnCreateView()来加载广告。我注意到,OnCreateView被多次调用自定义广告偏好设置。即使您在首选项列表中滚动,也会发生这种情况,因此AdRequest会一次又一次地被触发。这个问题也被这里提到:
AdView requests new add every time SeekBar is touched
所以我感动的呼吁在AdRequest到onAttachedToHierarchy(),并使用一个成员变量来存储的AdView。然后,我使用存储的adView将其添加到OnCreateView()中的视图中 - 但是,这会导致一种奇怪的行为:广告重新加载已停止,但广告仅在“有时”列表顶部显示优先。例如,当我加载首选项时,广告未被显示。我向下滚动,然后又突然,广告在那里。再次下降,再次快速上升,广告消失了。闲聊:广告再次出现。调试表明,从OnCreateView()的一些多次调用中,有一些“成功”,并且广告得到显示,有些则不成功。看起来,它需要一个“成功”的调用发生在OnCreateView()的最后一次调用,因此广告停留在屏幕上。 我需要做些什么才能确保adView始终正确显示?在首选项屏幕中显示广告可能有不同的方法吗?
我的代码如下:
的喜好来显示广告:
public class AdPreference extends Preference {
public AdPreference(Context context, AttributeSet attrs, int defStyle) {super (context, attrs, defStyle);}
public AdPreference(Context context, AttributeSet attrs) {super(context, attrs);}
public AdPreference(Context context) {super(context);}
/** The view to show the ad. */
private AdView adView;
/* Your ad unit id. Replace with your actual ad unit id. */
private static final String AD_UNIT_ID = "XXXXXXXXXXXXXXX";
@Override
public void onAttachedToHierarchy(PreferenceManager preferenceManager){
super.onAttachedToHierarchy(preferenceManager);
Activity activity = (Activity)getContext();
// Create an adView.
adView = new AdView(activity);
adView.setAdSize(AdSize.BANNER);
adView.setAdUnitId(AD_UNIT_ID);
// Create an ad request. Check logcat output for the hashed device ID to
// get test ads on a physical device.
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.build();
// Start loading the ad in the background.
adView.loadAd(adRequest);
}
@Override
protected View onCreateView(ViewGroup parent) {
// this will create the linear layout defined in ads_layout.xml
View view = super.onCreateView(parent);
if (adView.getParent()!=null)
{
((LinearLayout)adView.getParent()).removeAllViews();
}
((LinearLayout)view).addView(adView);
return view;
}
}
片段偏好的XML:
<?xml version="1.0" encoding="UTF-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:examplens="http://example.com">
<example.AdPreference android:layout="@layout/ad_preference" />
<Preference android:title="@string/preference1" />
.
.
.
<PreferenceCategory>
</PreferenceCategory>
布局XML的广告偏好:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/linearLayoutForAd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
</LinearLayout>
请让我知道如果问题描述不清楚,你需要更多的代码/信息!提前致谢!
感谢您的回复!通常我会尽量避免在首选项中显示广告,但应用程序是一个**安卓动态壁纸**,所以没有“主体”或用户界面来处理...并在墙纸中显示广告本身对用户来说会更糟糕:-(。 如果您的评论更像是“将偏好列表中的广告放在偏好设置屏幕之外”,您能否告知我们如何去做?我很乐意采用这种方法,但我不知道这是如何在Android PreferenceFragment的环境下工作的,因为它似乎在显示时带来了自己的布局。 – MrWagoner
对不起,我不认为你可以做你想做的事。说实话,我不确定你花时间进行投资是否值得(甚至可以开展工作)。除非您有上千万的用户经常更改设置,否则您将看到在短时间内显示的广告的点击次数很少,您可能看到的收入极少。 – William
感谢您再次回复!对于您对广告收入的估算,我完全同意您的看法:我也不希望在广告上看到很多点击。尽管如此,我还是想做广告整合,因为我想在更大型的项目中使用它之前,更多地了解AdMob集成的细节。 在技术方面,我现在通过缓存整个LinearLayout而不是AdView来查看答案。再次感谢您的想法和您的考虑! – MrWagoner