Я получаю ошибку
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
Ответы:
Как сказал hdemirchian, обязательно используйте:
А также убедитесь, что действие, которое использует фрагмент (ы), расширяется
FragmentActivity
вместо обычногоActivity
,чтобы получить
FragmentActivity
класс.источник
Исключение
android.view.InflateException: Binary XML file line: #... Error inflating class fragment
может произойти, если вы манипулируетеgetActivity()
внутри своего фрагмента передonActivityCreated()
вызовом. В таком случае вы получаете неверную ссылку на деятельность и не можете на это полагаться.Например, следующий шаблон неверен:
Правильный шаблон № 1
Правильный шаблон № 2
источник
getActivity()
внутриonActivityCreated()
или в любом последующем методе жизненного цикла, но преждеonDestroyView()
.Убедитесь, что ваш
Activity
расширяетFragmentActivity
.источник
У меня была такая же ошибка. Я копал весь день, не знаю, но я думаю, что попробовал ~ 25 решений по этой проблеме. Ничего не работало, пока в 2 часа ночи я не узнал, что мне не хватает этой строки в xml-файле приложения:
Эта строка была внутри
<application>
тега. Я очень надеюсь, что это поможет кому-то. GL.источник
У меня такая же проблема. Решением для меня был порядок super.onCreate и setContentView в FragmentActivity
Следующий заказ работает нормально:
источник
super
всегда должен вызываться в начале метода.super.method()
нужно вызывать первым. Это зависит от того, что делает метод суперкласса. В случаеFragmentActivity
этого происходит некоторая инициализация, необходимая дляsetContentView
правильной работы. Тем не менее, в другом методе (скажемonKeyUp
) вы можете условно выполнить некоторую работу с действием, но отступить, иsuper.onKeyUp
в этом случае вы, скорее всего, захотите вызвать егоsuper.onKeyUp
в самом конце функции.super()
(конструктор суперкласса) должен быть первой функцией, вызываемой в любом конструкторе дочерних классов, однако его вызов не обязательно является обязательным (он будет полностью зависеть от расширяемого класса).Фрагменты не могут быть вложены в XML
Выучил это нелегким путем - если вы вложите
<fragment>
тег, основанный на макете XML, в (потенциально) динамически загружаемый фрагментFragmentManager
, то вы начнете получать странные ошибки, пытаясь раздуть ваш фрагмент xml.Оказывается, это не поддерживается - это будет работать нормально, если вы будете делать это только с помощью
FragmentManager
подхода.Я получил эту проблему, потому что я пытался загрузить фрагмент внутри
<DrawerLayout>
из XML, и это вызывало сбой вonCreateView()
методе, когда я получил обратно стек.источник
appcompat-v7:23.3.0
<fragment>
с<frameLayout>
работал. Я все еще понимаю это. - stackoverflow.com/a/19167009/5477548У меня была та же проблема, с которой вы сталкиваетесь. Ни один из советов сверху не помог мне. Позже я обнаружил, что все, что мне нужно было сделать, это исправить импорт из:
чтобы:
источник
Ты пробовала:
источник
Убедитесь, что в методе onCreateView фрагмента нет исключений. Если в этом методе возникает какое-либо исключение, logcat не будет показывать точные сведения об исключении, вместо этого он всегда показывает сообщение:
источник
Если ваше
TaskDetailsFragment
расширениеandroid.app.Fragment
, изменитеonCreateView()
.Верните ваш вид, который вы хотите показать во фрагменте, или конвертируйте свой макет в вид с помощью LayoutInflater и верните его.
Надеюсь, это работает. :)
источник
Проверьте ваш путь к классу, возможно, инфлятор представления не может найти определение вашего класса, как определено в вашем xml class = "de.androidbuch.activiti.task.TaskDetailsFragment", указанный выше путь может быть неправильным.
источник
Я получал эту ошибку по разным причинам.
Действия по воспроизведению:
~> Моя проблема заключалась в том, что я создал совершенно новое пустое приложение.
~> Затем я сгенерировал пользовательский фрагмент из меню Файл ~> Новый файл.
~> Продолжить настраивать фрагмент, добавляя макеты, кнопки и т. Д.
~> Ссылка на новый пользовательский фрагмент в автоматически сгенерированном файле activity_my.xml, который был сгенерирован для меня при создании приложения. Это позволило XML сгенерировать объекты для меня.
Вот ловушка при генерации пользовательского фрагмента через File ~> New File Menu, он автоматически генерирует заглушку функции интерфейса и помещает ее в конец файла класса фрагмента.
Это означает, что ваш класс MyActivity должен реализовывать этот интерфейс. Если это не так, то вышеупомянутая ошибка возникает только при ссылке на фрагмент из XML. При полном удалении ссылки на фрагмент в XML и создании фрагмента с помощью кода в файле класса MyActivity.java Logcat генерирует более краткую ошибку, подробно объясняющую проблему и жалующуюся на интерфейс. Это продемонстрировано в шаблоне проекта «Деятельность + фрагмент». Хотя <~ этот шаблон проекта не генерирует заглушку интерфейса.
источник
Для меня это было после прокрутки в трассировке стека, я обнаружил, что им не хватает разрешения для android.permission.ACCESS_NETWORK_STATE
после добавления этого разрешения это было исправлено
источник
Если у вас есть отдельные файлы макетов для портретного и альбомного режимов, и вы получаете ошибку инфляции при каждом изменении ориентации после нажатия на элемент, скорее всего, существует несоответствие между файлами макета.
Когда вы получаете ошибку, это только когда вы щелкаете по элементу в альбомном режиме или только в портретном режиме или в обоих? Использует ли ваша деятельность TaskDetailsFragment файл макета, в котором могут быть расхождения между альбомным и портретным режимами?
источник
Если вы добавляете
Fragment
статически, то есть в xml, вы, возможно, пропустили реализациюOnFragmentInteractionListener
в своемActivity
классе. Тогда реализация интерфейса решит проблему. Если вы добавляетеFragment
динамически, то есть в класс Java, то это не решение. Потому что сама IDE не позволит вам продолжить работу без реализации необходимых интерфейсов.источник
В этом случае моей проблемой был простой случай, когда в одном из моих методов вызывалось исключение из-за тупого нулевого указателя, которое вызывалось позже в жизненном цикле. Это вызывало у меня исключение «Ошибка раздувания фрагмента класса». Короче говоря, не забудьте проверить дальнейшую трассировку стека исключений для возможной причины.
Как только я разрешил исключение нулевого указателя, мой фрагмент загрузился нормально.
источник
Ни одно из упомянутых выше решений не помогло мне. В журнале я мог найти детали исключения, как указано ниже:
Я сделал это, и мой код работал!
источник
Если вы не хотите ничего менять и идите с тегом фрагмента
сделай это,
источник
Имел тот же тип ошибки, где отображалось точно такое же сообщение об ошибке в logcat. Мне нужно было внести изменения в Java Build Path, расположенный в
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, упомянутые ранее.источник
В вашем XML-файле просто используйте вместо тега. Инфлятор пытается создать android.app.Fragment, из которого произойдет сбой API <10. Поэтому вам нужно создать группу представлений другого типа.
источник
Я получил эту ошибку при использовании ListFragment, но id представления списка был listView1 вместо list.
'Ваш контент должен иметь ListView, атрибут id которого' android.R.id.list ''
http://developer.android.com/reference/android/app/ListFragment.html
источник
убедитесь, что вы использовали этот
не этот..
источник
Просто была такая же ошибка. Моей причиной была видимость моего фрагмента. Он был установлен по умолчанию, должен быть публичным.
источник
Не могли бы вы опубликовать фрагмент
onCreate
иonCreateView
методы? У меня было точно такое же исключение, которое было вызвано исключением вonCreate
методе фрагмента , когда я исправил эту проблему, он исправил ошибку, надувающую фрагмент класса.источник
Я получал эту ошибку в Android Studio, проблема была в том, что мой фрагмент имел относительное расположение, в то время как код функции OnCreateView был
ваш код делает то же самое?
источник
Если вы хотите унаследовать действие AppCompatActivity , то вы можете сделать что-то вроде этого. В XML-упражнении используйте FrameLayout, как показано ниже.
а в деятельности
onCreate
-источник
Я получил ту же ошибку, но моя проблема заключалась в том, что у моего фрагмента не было идентификатора в XML-макете родительского действия.
источник
После одного дня борьбы я обнаружил, что проверка сценария может быть, вы сталкиваетесь с тем же,
Примечание - не добавляйте два ключа в файл манифеста удалить ключ карты
выше код и добавьте этот код.
источник
У меня была похожая проблема; после запуска примера AdMob я попытался вставить рекламу в свое приложение, вызвав эту ошибку:
Решение таково: вы не можете вставить фрагмент объявления в ListActivity. Вместо этого я мог бы добавить его к FragmentActivity и ActionBarActivity без каких-либо проблем.
Мое предложение: начните с примера AdMob и добавьте в него свое существующее приложение: я бы сэкономил много времени !!!
источник
Если вы используете обфускацию с компонентом Навигация, вам нужно исключить фрагмент Android и ваши аргументы. Добавьте эти строки в ваши файлы proguard-rules:
источник