【发布时间】:2014-12-06 09:37:15
【问题描述】:
按照https://developers.google.com/mobile-ads-sdk/docs/admob/android/quick-start 的提示,我遇到了inflating fragments 的问题。 Google play services lib 被添加到 libs/ 并作为项目依赖项,也尝试通过外部引用 sdk。 Manifest 在application 标签上添加了元数据,例如:
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
AdFragment class 在视图底部的 main_activity 视图中设置..:
<RelativeLayout ... >
...
<fragment
android:id="@+id/adFragment"
android:name="com.puzzle.activities.MainActivity$AdFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" />
</RelativeLayout>
AdFragmentclass 放在Activity:
public static class AdFragment extends Fragment {
private AdView mAdView;
public AdFragment() {
}
@Override
public void onActivityCreated(Bundle bundle) {
super.onActivityCreated(bundle);
// Gets the ad view defined in layout/ad_fragment.xml with ad unit
// ID set in
// values/strings.xml.
mAdView = (AdView) getView().findViewById(R.id.adView);
// Create an ad request. Check logcat output for the hashed device
// ID to
// get test ads on a physical device. e.g.
// "Use AdRequest.Builder.addTestDevice("ABCDEF012345") to get test ads on this device."
AdRequest adRequest = new AdRequest.Builder().addTestDevice(
AdRequest.DEVICE_ID_EMULATOR).build();
// Start loading the ad in the background.
mAdView.loadAd(adRequest);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_admob, container, false);
}
/** Called when leaving the activity */
@Override
public void onPause() {
if (mAdView != null) {
mAdView.pause();
}
super.onPause();
}
/** Called when returning to the activity */
@Override
public void onResume() {
super.onResume();
if (mAdView != null) {
mAdView.resume();
}
}
/** Called before the activity is destroyed */
@Override
public void onDestroy() {
if (mAdView != null) {
mAdView.destroy();
}
super.onDestroy();
}
}
AdFragment xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
ads:adSize="BANNER"
ads:adUnitId="@string/banner_ad_unit_id" >
</com.google.android.gms.ads.AdView>
</RelativeLayout>
错误输出是:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.puzzle/com.puzzle.activities.MainActivity_}: android.view.InflateException: Binary XML file line #43: Error inflating class fragment
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2189)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2216)
at android.app.ActivityThread.access$600(ActivityThread.java:149)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1305)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:153)
at android.app.ActivityThread.main(ActivityThread.java:5022)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1032)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:790)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #43: Error inflating class fragment
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:261)
at android.app.Activity.setContentView(Activity.java:1874)
at com.puzzle.activities.MainActivity_.setContentView(MainActivity_.java:45)
at com.puzzle.activities.MainActivity_.onCreate(MainActivity_.java:36)
at android.app.Activity.performCreate(Activity.java:5032)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2153)
... 11 more
Caused by: java.lang.ClassCastException: com.puzzle.activities.MainActivity$AdFragment cannot be cast to android.app.Fragment
at android.app.Fragment.instantiate(Fragment.java:577)
at android.app.Fragment.instantiate(Fragment.java:552)
at android.app.Activity.onCreateView(Activity.java:4680)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680)
... 23 more
欣赏您的想法。
【问题讨论】:
-
您的 MainActivity$AdFragment 类的邮政编码
-
class AdFragment extends Fragment 作为静态放置在空白 Activity 中,没有更多关于 admob 的内容。
标签: java android android-fragments admob google-play-services