Использование FragmentActivity вызывает InflateException

Общий фрагмент для использования в 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) в первый раз, когда второе действие вызывает 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


person Siddharth    schedule 07.08.2012    source источник
comment
Покажите код вашего фрагмента.   -  person Barak    schedule 07.08.2012
comment
Его реклама расширяет FragmentActivity   -  person Siddharth    schedule 07.08.2012
comment
Тогда вам нужно исследовать фрагменты. Это не фрагмент. Это класс из библиотеки поддержки, позволяющий создать действие, которое может использовать фрагменты. Фрагмент расширит класс фрагмента.   -  person Barak    schedule 07.08.2012
comment
Я изменил его на фрагмент, такое же исключение.   -  person Siddharth    schedule 07.08.2012


Ответы (1)


Давайте начнем с самого начала. Действие не является фрагментом, а фрагмент не является действием.

Вам нужна активность для содержания/управления фрагментами. Для этого вы расширяете Activity (для разработки Honeycomb+) или используете библиотеку поддержки и расширяете FragmentActivity. В этом классе вы должны использовать setContentView для установки макета, который будет содержать фрагмент(ы).

Затем вы из этого класса вызываете диспетчер фрагментов (getFragmentManager или getSupportFragmentManager в зависимости от того, какой класс вы расширили). Затем диспетчер фрагментов используется для создания, присоединения и отсоединения фрагментов.

Фрагмент, не являющийся активностью, кодируется иначе. У него должен быть метод onCreateView, который раздувает макет фрагмента и возвращает его диспетчеру фрагментов из активности.

Затем обычно используется onActivityCreated для остальной части вашего кода (или чего-то еще).

Внесение изменений для правильного использования фрагментов может решить или не решить все ваши проблемы, поскольку я вижу, что вы используете какой-то пользовательский виджет в своем макете, и проблема может быть и там.

person Barak    schedule 07.08.2012
comment
Через некоторое время я обновлю ответ правильным кодом. Спасибо. - person Siddharth; 07.08.2012