2014-02-25 72 views
2

我在我的Layout的XML中定义了一个AdView,如果用户购买了该应用的无广告版本,我想让它消失。完全删除AdView

我在做什么是

if(userhaspurchased){ 
    if (mAdView != null) { 
     mAdView.setVisibility(View.GONE); 
     mAdView.pause(); 
     ViewGroup vg = (ViewGroup) mAdView.getParent(); 
     mAdView.destroy(); 
     vg.removeView(mAdView); 
     mAdView = null; 
    } 
    Log.d("Purchased","true"); 
} else { //Load ad } 

而且广告是不可见的,但在日志中我仍然得到的AdView消息:

02-25 11:14:58.688: I/Ads(9279): Ad is not visible. Not refreshing ad. 
02-25 11:14:58.688: I/Ads(9279): Scheduling ad refresh 60000 milliseconds from now. 

而且他们重复的每一分钟。有什么办法可以完全禁用AdView

更新: @Doomsknight答案罚款在我的情况下,我只有2布局与广告。否则将是检查购买并最终以编程方式插入AdView的最佳实践。

+1

你的XML被定义广告视图。并自动连接。你可以有一个付费版本的XML,并设置该XML,如果付款在顶部,根本没有定义adview – Doomsknight

+0

哇,我没有想到这个解决方案! – Vektor88

+0

这将是一个矫枉过正,如果你必须维护两个不同的xml布局只为一个视图 –

回答

4

您的xml正在定义广告视图。并自动连接。所以当你隐藏它时,它已经被初始化了。

解决方案之一是将xml完全排除在adview上,用于付费版本。

,并将其设置在顶部

if(userhaspurchased) 
    setContentView(R.layout.paid_version_xml); 
else 
    setContentView(R.layout.free_version_xml); 

然而,这取决于你有多少个XML已经和adviews。由于使用adview维护每个页面的变体可能是一个问题。

+0

我只有2 xml布局与广告。所以这不是什么大问题。谢谢! – Vektor88

+0

@ Vektor88是的,我有这样的印象,所以张贴了一个答案。只要把它放在便条中,让其他人知道潜在的问题。 – Doomsknight

3

请勿在xml文件中添加adview视图。相反,在xml布局文件中添加一个占位符。

<LinearLayout 
    android:id="@+id/admob" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:orientation="horizontal" > 

</LinearLayout> 

在您的代码:

if(!userhasPurchased) 
{ 
    AdView adView = new AdView(this, AdSize.BANNER, adunit_id); 
    LinearLayout layout = (LinearLayout) findViewById(R.id.admob); 
    layout.addView(adView); 
    AdRequest adRequest = new AdRequest(); 
    adView.loadAd(adRequest); 
} 
+1

这是一个更好的解决方案:) +1 – Doomsknight

+1

当你必须处理很多布局时都很好。但是,如果您想使用SMART_BANNER大小,如果尝试以编程方式插入它,则会遇到麻烦。 – Vektor88