0

2つのアクティビティで使用される一般的なフラグメント

public class Ads extends Fragment {
    private View rootView ;
    private MoPubView adView ;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.ads, container, true) ;
        adView = (MoPubView) rootView.findViewById(R.id.adView) ;
        adView.setAdUnitId(LogoQuizUtil.MOPUB_AD_UNIT);     
        adView.loadAd();
        return rootView;
    }
}

フラグメントレイアウト

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ad_layout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:gravity="bottom" >

    <com.mopub.mobileads.MoPubView
        android:id="@+id/adView"
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:layout_marginTop="10dp"
        android:gravity="bottom" />    
</LinearLayout>

このフラグメントを含める他のレイアウト

 <fragment
    android:id="@+id/ads"
    android:name="myPackage.Ads"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:gravity="bottom" />

初めてsetContentView(R.layout.ads)を呼び出すと、例外が発生しません。2番目のアクティビティがfragementactivity(Ads)を呼び出すと、setContentView(R.id.ads)で例外が発生します。

私が得る例外は

08-07 09:38:30.359: W/System.err(975): java.lang.RuntimeException: Unable to start activity ComponentInfo{mypackage/mypackage.SecondActivity}: android.view.InflateException: Binary XML file line #263: Error inflating class fragment

4

1 に答える 1

3

最初から始めましょう。アクティビティはフラグメントではなく、フラグメントはアクティビティではありません。

フラグメントを含む/制御するアクティビティが必要です。これを行うには、Activity(Honeycomb +開発用に)拡張するか、サポートライブラリを使用して拡張しFragmentActivityます。このクラスsetContentViewでは、フラグメントを含むレイアウトを設定するために使用します。

次に、そのクラスから、フラグメントマネージャーを呼び出します(getFragmentManagerまたはgetSupportFragmentManager拡張したクラスによっては)。次に、フラグメントマネージャを使用して、フラグメントを作成、アタッチ、およびデタッチします。

アクティビティではないフラグメントは、異なる方法でコーディングされます。onCreateViewフラグメントのレイアウトを膨らませて、アクティビティからフラグメントマネージャーに返すメソッドが必要です。

次にonActivityCreated、コードの残りの部分(または他に必要なもの)に使用するのが一般的です。

フラグメントを適切に使用するように変更を加えると、すべての問題が解決する場合と解決しない場合があります。レイアウトで何らかのカスタムウィジェットを使用しているため、問題が発生する可能性もあります。

于 2012-08-07T05:55:13.667 に答える