0

用于 2 个 Activity 的通用片段

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) 时,我得到一个没有异常,当第二个活动调用 fagementactivity (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设置将包含片段的布局。

然后,您从该类调用片段管理器(getFragmentManagergetSupportFragmentManager取决于您扩展的类)。然后片段管理器用于创建、附加和分离片段。

片段不是一个活动,它的编码方式不同。它应该有一个onCreateView方法来扩展片段的布局并将其从活动返回给片段管理器。

然后通常onActivityCreated用于其余代码(或其他任何需要的代码)。

进行更改以正确使用片段可能会也可能不会解决您的所有问题,因为我看到您在布局中使用了某种自定义小部件,问题也可能存在。

于 2012-08-07T05:55:13.667 回答