広告の処理をActivityごとに書くのが面倒だったので、AdMobをフラグメントで実装しました。(GoogleAdMobAdsSdk-6.1.0を使用)
まずはベースとなるAdmobFragmentクラスです。必要最低限の機能だけ実装しています。
/** * Admobのフラグメントです。 * ※このフラグメントを使用するとloadAdOnCreate=trueの状態となります。 * * @author sogawa * */ public abstract class AdMobFragment extends Fragment { /** {@link AdView} */ private AdView mAdView; /** {@link AdRequest} */ private AdRequest mAdRequest; /** * {@inherited} */ @Override public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { mAdView = new AdView(getActivity(), getAdSize(), getUnitId()); mAdRequest = new AdRequest(); // リスナの設定 final AdListener listener = getAdListener(); if (listener != null) { mAdView.setAdListener(listener); } return mAdView; } /** * {@inherited} */ @Override public void onActivityCreated(final Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mAdView.loadAd(mAdRequest); } /** * {@inheritDoc} */ @Override public void onDestroyView() { super.onDestroyView(); mAdView.destroy(); } /** * 広告のサイズを設定します。 * * @return {@link AdSize} */ protected abstract AdSize getAdSize(); /** * ユニットIDを指定します。 * * @return ユニットID */ protected abstract String getUnitId(); /** * {@link AdListener}を取得します。 * デフォルトでは何も行いません。 * * @return {@link AdListener} */ protected AdListener getAdListener() { return null; } }次にAdMobFragmentを継承したAdMobFragmentImplクラスを作成します。
AdMobFragmentImplクラスではAdSize、UnitId、必要に応じてリスナを設定します。
public class AdMobFragmentImpl extends AdMobFragment { /** * {@inherited} */ @Override protected AdSize getAdSize() { return AdSize.BANNER; } /** * {@inherited} */ @Override protected String getUnitId() { return "XXXXXXXXXXXXXX"; } }あとは、AdMobを入れたい箇所にFragmentの記述をするだけで、利用することができます。
<fragment android:layout_width="match_parent" android:layout_height="wrap_content" class="com.hoge.test.AdMobFragmentImpl" />AdMobFragmentを共通のライブラリとして使い、AdMobFragmentImplをプロジェクトごとに実装すると使いやすいと思います。
※追記
2012/08/15 Admob読み込み中に中断するときに不具合がありましたので、onResumeで広告ダウンロードを停止する処理を削除しました。
こんにちは
返信削除android.support.v4.app.Fragmentでは動きませんでした。
java.lang.ClassNotFoundException: android.view.fragment in loader dalvik.system.PathClassLoader
自己解決しました。
返信削除アクティビティが継承するクラスを変更していませんでした。
Activity → FragmentActivityでしたね。
失礼しました。