2014-02-25 162 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