Ошибка раздувания фрагмента класса

Я получаю сообщение об ошибке

Unable to start activity ComponentInfo{de.androidbuch.activiti/de.androidbuch.activiti.task.Activity}: android.view.InflateException: Binary XML file line #11: Error inflating class fragment

когда я переключаюсь через портрет и режим ландшафта. Я использую фрагменты. Мой xml:

 <LinearLayout android:id="@+id/mainLayout"
               android:orientation="horizontal"
               android:layout_width="fill_parent"
               android:layout_height="wrap_content" >

    <ListView android:id="@+id/android:list"
              android:layout_height="wrap_content"
              android:layout_width="fill_parent"/> 

    <fragment android:id="@+id/fragmentDetails"
              android:layout_height="fill_parent"
              android:layout_width="fill_parent"
              class="de.androidbuch.activiti.task.TaskDetailsFragment"/> 
</LinearLayout>

Если я переключаюсь в альбомном и портретном режимах, все работает нормально. Но когда я нажимаю на свой фрагмент (и вижу свой фрагмент), а затем переключаюсь на другой режим, я получаю ошибку. Любая идея, как я могу ее решить? Нашли здесь несколько ответов, но ни один из них не помог мне...

06-21 14:55:05.600: ERROR/AndroidRuntime(7636): FATAL EXCEPTION: main
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): java.lang.RuntimeException: Unable to start activity         
ComponentInfo{de.androidbuch.activiti/de.androidbuch.activiti.task.Activity}:   android.view.InflateException: Binary XML file line #11: Error inflating class fragment
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1736)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1752)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3097)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread.access$1600(ActivityThread.java:123)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:997)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.os.Looper.loop(Looper.java:126)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread.main(ActivityThread.java:3998)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at java.lang.reflect.Method.invokeNative(Native Method)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at java.lang.reflect.Method.invoke(Method.java:491)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at dalvik.system.NativeStart.main(Native Method)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class fragment
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:688)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:724)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:727)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.view.LayoutInflater.inflate(LayoutInflater.java:479)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.view.LayoutInflater.inflate(LayoutInflater.java:391)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.view.LayoutInflater.inflate(LayoutInflater.java:347)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:227)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.Activity.setContentView(Activity.java:1771)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at de.androidbuch.activiti.task.TaskActivity.onCreate(TaskActivity.java:83)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1700)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636):     ... 12 more

Ответ 1

Как сказал гдемирчян, обязательно используйте:

import android.support.v4.app.Fragment;

И также убедитесь, что активность, использующая фрагмент (ы), расширяет FragmentActivity вместо обычного Activity,

import android.support.v4.app.FragmentActivity;

чтобы получить класс FragmentActivity.

Ответ 2

Исключение android.view.InflateException: Binary XML file line: #... Error inflating class fragment может произойти, если вы управляете с помощью getActivity() внутри вашего фрагмента до onActivityCreated(), вызываемого. В этом случае вы получаете неправильную ссылку на действие и не можете полагаться на это.

Например, следующий шаблон неверен:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) 
{
    final View view = inflater.inflate(R.layout..., container, false);

    Button button = getActivity().findViewById(R.id...);
    button.setOnClickListener(...); - another problem: button is null

    return view;
}

Правильный шаблон # 1

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) 
{
    final View view = inflater.inflate(R.layout..., container, false);

    Button button = view.findViewById(R.id...);
    button.setOnClickListener(...);

    return view;
}

Правильный шаблон # 2

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    Button button = getActivity().findViewById(R.id...);
    button.setOnClickListener(...);
}

Ответ 3

Убедитесь, что ваш Activity расширяет FragmentActivity.

Ответ 4

У меня была такая же ошибка. Я копал весь день, не знаю, но я думаю, что я пробовал ~ 25 решений по этой проблеме. Никто не работал до тех пор, пока в 2AM я не узнал, что я пропустил эту строку в манифесте приложений xml:

<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />

Эта строка находилась внутри тега <application>. Я действительно надеюсь, что это поможет кому-то. GL.

Ответ 5

У меня была та же проблема. Решением для меня был порядок super.onCreate и setContentView в FragmentActivity

Следующий порядок работает нормально:

    super.onCreate(savedInstanceState);
    setContentView(R.layout.fc_activity_list_profiles);

Ответ 6

Фрагменты не могут быть вложены в XML

Узнал это трудным способом - если вы вставляете тег <fragment> на основе XML, внутри (потенциально) динамически загружаемого фрагмента из FragmentManager, тогда вы начинаете получать странные ошибки, пытаясь раздуть ваш фрагмент xml.

Оказывается, что это не поддерживается - он будет работать нормально, если вы сделаете это с помощью подхода FragmentManager.

Я получал эту проблему, потому что я пытался загрузить фрагмент внутри <DrawerLayout> из xml, и это вызвало сбой в методе onCreateView(), когда я вынул задний стек.

Ответ 7

У меня была та же проблема, с которой вы сталкиваетесь. Ни один из советов на вершине не помог мне. Позже я обнаружил, что все, что мне нужно было сделать, это исправить мои импорт из:

import android.app.Fragment;

в

import android.support.v4.app.Fragment;

Ответ 8

Убедитесь, что в методе onCreateView фрагмента нет исключения. Если в этом методе возникает какое-либо исключение, logcat не будет показывать точные сведения об исключении, вместо этого он всегда показывает сообщение:

Caused by: java.lang.ClassNotFoundException: Didn't find class "android.view.fragment" 
on path: DexPathList[[zip file "/data/app/com.package/base.apk"],
nativeLibraryDirectories=[/data/app/com.package/lib/arm64, /vendor/lib64, /system/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)

Ответ 9

Вы пробовали:

 <fragment
            android:name="de.androidbuch.activiti.task.TaskDetailsFragment"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />

Ответ 10

Если ваш TaskDetailsFragment расширяющийся android.app.Fragment, измените его на onCreateView().

Верните представление, которое вы хотите показать в фрагменте, или преобразуйте макет для просмотра с помощью LayoutInflater и верните его.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View mainview = inflater.inflate(R.layout.main, null);
    return mainview;
}

Надеюсь, что это сработает.:)

Ответ 11

Проверьте путь к классу, это может быть инфлятор представления, который не смог найти определение вашего класса, как определено в вашем xml class= "de.androidbuch.activiti.task.TaskDetailsFragment" вышеуказанный путь может быть неправильным.

Ответ 12

Для меня это было после прокрутки в трассе стека, я обнаружил, что у меня нет разрешения на android.permission.ACCESS_NETWORK_STATE

после добавления этого разрешения было исправлено

Ответ 13

Я получал эту ошибку по разным причинам.

Шаги для воспроизведения:

~ > Моя проблема заключалась в том, что я создал совершенно новое приложение.

~ > Затем я сгенерировал пользовательский фрагмент из меню File ~ > New File.

~ > Продолжалось настраивать фрагмент, добавляя макеты и кнопки и т.д.

~ > Ссылка на новый пользовательский фрагмент в автоматически созданном файле activity_my.xml, который был создан для меня при создании приложения. Это позволило XML генерировать объекты для меня.

Heres - это уловка при создании пользовательского фрагмента через File ~ > New File Menu, который автоматически генерирует заглушку функции интерфейса и помещает его в конец файла класса фрагмента.

Это означает, что ваш класс MyActivity должен реализовать этот интерфейс. Если это не так, вышеуказанная ошибка возникает только при ссылке на фрагмент из xml. Полностью удалив ссылку на фрагмент в XML и создав фрагмент через код в файле класса MyActivity.java, Logcat генерирует более сжатую ошибку, подробно объясняющую проблему и жалующуюся на интерфейс. Это показано в разделе "Шаблон проекта + фрагмент". Хотя, < ~, что шаблон проекта не генерирует заглушку интерфейса.

Ответ 14

Если у вас есть отдельные файлы макета для портретных и ландшафтных режимов и вы получаете ошибку инфляции, когда вы меняете ориентацию после нажатия на элемент, скорее всего, расхождение между вашими файлами макета.

Когда вы получаете сообщение об ошибке, это только когда вы нажимаете элемент в альбомном режиме или только в портретном режиме или на обоих? В вашей работе TaskDetailsFragment используется файл макета, который может иметь расхождения между ландшафтными и портретными режимами?

Ответ 15

Ни одно из упомянутых выше решений не помогло мне. В журнале я мог найти деталь исключения, как указано ниже:

06-19 16:20:37.885: E/AndroidRuntime(23973): Caused by: java.lang.RuntimeException: API key not found.  Check that /meta-data/ android:name="com.google.android.maps.v2.API_KEY" android:value="your API key"/ is in the application element of AndroidManifest.xml.

Я сделал это, и мой код работает!

<meta-data  android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyCl1yGPZ3mpxxxxxxxAz2R-t7zcWVzrHUL9k"/>
</application>

Ответ 16

Моя проблема в этом случае была простым экземпляром исключения тупого нулевого указателя в одном из моих методов, который был вызван позже на жизненном цикле. Это вызывало для меня исключение "Разрыв кода класса". Короче говоря, не забудьте проверить дальнейшее отслеживание трассы стека исключений для возможной причины.

Как только я разрешил исключение нулевого указателя, мой фрагмент загрузился нормально.

Ответ 17

Если вы не хотите ничего менять и идите с тегом фрагмента

сделай это,

<fragment
 android:visibility="gone" (Visibility will not work, just helps in removing frag from xml viewer)(If you want the visibility to be gone make it in your fragment root element visibility=gone)
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:name="com.example.YOUR_FRAGMENT" (This is important)
 />

Ответ 18

Имел тот же тип ошибки, где отображалось точно такое же сообщение об ошибке в logcat. Мне нужно было внести изменения в путь сборки Java, расположенный в Project->Properties. Я включил такие библиотеки Google Maps, как android-support-v4.jar и google-play-services.jar; однако я отсутствовал, включая их, в 'Build class path' в меню опций 'Order and Export'. Возможно, ошибка здесь.

Попробуйте включить библиотеки в путь класса сборки.

Порядок построения классов может также вызвать ошибку, поэтому мой совет также должен попытаться изменить порядок пути построения. Ошибка исчезла, когда я использовал следующий порядок: 'my_project_name/src'->'my_project_name/gen'->'Android Private Libraries'. Последняя единица содержит файлы jar, упомянутые ранее.

Ответ 19

Если вы добавляете Fragment статически, то есть в xml, то, возможно, вы пропустили реализацию OnFragmentInteractionListener в своем классе Activity. Тогда реализация интерфейса решит проблему. Если вы добавляете Fragment динамически, то есть в класс java, это не решение. Поскольку сама IDE не позволит вам работать без реализации необходимых интерфейсов.

Ответ 20

В вашем XML файле просто используйте вместо тега. Надуватель пытается создать файл android.app.Fragment, из которого не удастся выполнить API < 10. Поэтому вам нужно создать группу вида другого типа.

Ответ 21

Я получил эту ошибку при использовании ListFragment, но идентификатор списка был listView1 вместо списка.

'В вашем контенте должен быть ListView, атрибут id которого "android.R.id.list"

http://developer.android.com/reference/android/app/ListFragment.html

Ответ 22

убедитесь, что u использовал этот

<meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="AIzaSyBEwmfL0GaZmdVqdTxxxxxxxx-rVgvY" />

не это..

<meta-data 
         android:name="com.google.android.gms.version" 
          android:value="AIzaSyBEwmfL0GaZmdVqdTCvxxxxxxx-rVgvY" /> 

Ответ 23

Просто эта ошибка. Причиной моей была видимость моего класса фрагментов. Он был установлен в значение по умолчанию, должен быть общедоступным.

Ответ 24

Не могли бы вы разместить фрагменты onCreate и onCreateView? У меня было точно такое же исключение, вызванное исключением в методе onCreate, когда я исправил эту проблему, он исправил фрагмент класса раздувания Error.

Ответ 25

У меня была аналогичная проблема; после запуска примера AdMob, я попытался вставить Объявления в свое приложение, вызвав эту ошибку:

01-02 16:48:51.269    8199-8199/it.dndc.BreathPlot E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.IllegalStateException: Could not execute method of the activity
 Caused by: android.view.InflateException: Binary XML file line #57: Error inflating class fragment

Решение: вы не можете вставить фрагмент для Ad в ListActivity. Вместо этого я мог бы добавить его в FragmentActivity и в ActionBarActivity без каких-либо проблем.

Мое предложение: начните с примера AdMob и добавьте в него свое существующее приложение: я бы сэкономил много времени!!!

Ответ 26

Я получал эту ошибку в студии Android, проблема заключалась в том, что мой фрагмент имел относительный макет, а код в функции OnCreateView был

mDrawerListView = (ListView) inflater.inflate(
                R.layout.fragment_navigation_drawer, container, false);

Ваш код делает то же самое?

Ответ 27

Если вы хотите наследовать AppCompatActivity, тогда вы можете сделать что-то вроде этого - В действии xml используйте FrameLayout, как это -

<FrameLayout
    android:id="@+id/result_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/progress_frame"/>

и в активности onCreate -

final FragmentManager supportFragmentManager = getSupportFragmentManager();
    FragmentTransaction ft = supportFragmentManager.beginTransaction();
    ft.replace(R.id.result_fragment, fphResultActivityFragment, "result fragment");
    ft.commitAllowingStateLoss();

Ответ 28

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

Ответ 29

После однодневной борьбы я обнаружил, что некоторые сценарии проверки могут быть вы сталкиваетесь с тем же,

Если все происходит так же, как и код google, тогда проверьте файл манифеста в моем случае. Я добавил ключ geo и ключ карты, почему возникает исключение,

Примечание. Не добавляйте два ключа в файл манифеста. Удалите карту.

meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="@string/google_maps_key"/>

выше кода и добавьте этот код.

 <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="@string/auto_location"/>

 <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version"/>

Ответ 30

Убедитесь, что ваша активность расширяет FragmentActivity или AppCompatActivity