2015-09-06 79 views
1

我的應用正在使用導航抽屜。點擊抽屜中的項目後,它會顯示一個片段。我把AdMob的代碼片段裏面,顯示如下:AdMob導致顯示片段延遲

public class MenuIncome extends Fragment { 

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     final View rootView = inflater.inflate(R.layout.menu_income, container, false); 
     AdView mAdView = (AdView) rootView.findViewById(R.id.adView); 
     AdRequest adRequest = new AdRequest.Builder().build(); 
     mAdView.loadAd(adRequest); 
     mAdView.destroy(); 

     return rootView; 
    } 
} 

在我把AdMob的代碼,我的片段會在瞬間點擊抽屜式導航欄中顯示的條目。但是當我放置AdMob代碼後,當我點擊抽屜上的一個項目時,有時候我的應用會被凍結1秒鐘,然後只會顯示片段(包含廣告)。

爲什麼會發生這種情況?我認爲AdView已經異步加載其廣告。

+1

你爲什麼加載廣告後,摧毀你的AdView。這無疑會造成問題。 – William

+0

,因爲它似乎所有的教程這樣做。 – imin

+0

我從來沒有見過這樣的教程。絕大多數Admob公司的產品都沒有這樣做。 – William

回答

0

您是否嘗試過將AdView放入您的父母Activity,該父母是Fragment

以下設置是我在我的應用程序中使用廣告的方式,該應用程序還使用導航抽屜和多個片段。加載碎片沒有任何延遲。實際上,根據具體情況,片段有時會在廣告之前加載。

MainActivity.java

public class MainActivity extends ActionBarActivity { 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     AdView mAdView = (AdView) findViewById(R.id.adView); 
     AdRequest adRequest = new AdRequest.Builder().build(); 
     mAdView.loadAd(adRequest); 
    } 

} 

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    ...> 

    ... 

    <com.google.android.gms.ads.AdView 
     android:id="@+id/adView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_alignParentBottom="true" 
     ads:adSize="BANNER" 
     ads:adUnitId="@string/banner_ad_unit_id"> 
    </com.google.android.gms.ads.AdView> 

</RelativeLayout> 
+0

我不認爲我可以做你的。並非我所有的片段都有AdView。此外,我不明白的是,從上面的代碼看來,您似乎在您的MainActivity中加載廣告。那麼它下面的單個片段如何加載廣告呢? – imin

3

loadAd(..)第一個電話需要一段時間的AdMob的初始化和這個加載時凍結您的片段。 直到你的片段已經被加載並可見可以延遲初始化:

   mAdView.postDelayed(
        new Runnable() { 
         @Override 
         public void run() { 
          mAdView.loadAd(adRequest); 
         } 
        }, 500 
      );