андроид.вид.InflateException: двоичный XML-файл: ошибка раздувания фрагмента класса
у меня очень неприятная ошибка, которую я не могу объяснить. Я создал приложение для Android, которое использует Android AppCompat чтобы сделать его совместимым со старыми версиями. Вот мой основной файл макета активности:
и вот основной код моей деятельности :
основная проблема здесь: выше код работает плавно на почти устройствах (стимулированное устройство или некоторые реальные устройства). Но когда я запускаю его на Samsung S3. Он замечает эту ошибку:
пожалуйста скажите мне, как исправить ошибку, спасибо:)
27 ответов
после долгого времени для отладки я исправил эту проблему. (Хотя я до сих пор не могу объяснить, почему). Что я меняю собственность android:name to class . (хотя в документе Android они говорят, что эти свойства одинаковы, но он работает . )
Итак, он должен измениться от:
Итак, новый макет должен быть :
надеюсь, что это поможет 🙂
Я не мог решить мою проблему, используя предоставленные ответы. Наконец, я изменил это:
и это работает.
Если вы используете его внутри фрагмента, используйте getChildFragmentManager вместо getSupportFragmentManager.
это может больше не понадобиться вам, но если дальнейшие читатели найдут это полезным. У меня точно такой же android.view.InflateException. Error inflating class fragment . У меня были все нужные библиотеки. Решено, добавив еще одно разрешение пользователя в AndroidManifest.xml файл, т. е.
кстати, я бежал Android Studio 0.8.9 on Ubuntu 12.04.
у меня была такая же проблема, проблема, попробовал все ответы в этой теме без толку. Мое решение, я просто не добавили ID в XML-активности. Я не думал, что это будет иметь значение, но это имело.
Итак, в XML активности у меня было:
Если кто-то будет рад прокомментировать, почему это, я все уши, другим, я надеюсь, что это поможет.
у меня такая же проблема, потому что я не выполнил слушатель. Увидеть следующий код /*Add This!*/ .
FYI, мой класс фрагментов примерно следующий:
Я также замечаю это же сообщение об ошибке при других обстоятельствах, когда есть исключение в
ваш NavigationDrawerFragment расширяет android.поддержка.В4.приложение.Фрагмент? Другими словами, вы импортируете правильный пакет?
у меня также была эта проблема. Я решил это, заменив импорт в MainActivity и NavigationDrawerFragment
я MainActivity предоставляет ActionBarActivity вместо активности
использовать ActionBar actionBar = getSupportActionBar(); чтобы получить ActionBar
и я обновил следующую функцию в NavigationDrawerFragment
TL / DR: исключение во время создания фрагмента ссылка из XML макета более высокого уровня. Это исключение привело к сбою инфляции макета более высокого уровня, но первоначальное исключение не было сообщено; в трассировке стека отображается только сбой инфляции более высокого уровня. Чтобы найти первопричину, вы должны поймать и зарегистрировать начальное исключение.
первопричина ошибки могут быть самыми разными, поэтому здесь так много разных ответов на вопрос, что именно решило проблему для каждого человека. Для некоторых, это было связано с id , class или name атрибуты. Для других это было связано с проблемой разрешений или настройкой сборки. Для меня это не решило проблему; вместо этого был привлекательный ресурс, который существовал только в drawable-ldrtl-xhdpi , а не в соответствующем месте, как drawable .
но это только детали. Этот проблема в том, что сообщение об ошибке, которое появляется в logcat, не описывает исключение, которое запустило все это. Когда XML-файл макета более высокого уровня ссылается на фрагмент, фрагмент onCreateView() называется. Когда исключение происходит в фрагменте onCreateView() (например, при раздувании XML-макета фрагмента) это приводит к сбою инфляции XML-макета более высокого уровня. Этот сбой инфляции более высокого уровня-это то, что сообщается как исключение в журналах ошибок. Но первоначальное исключение, похоже, не продвигается по цепочке достаточно хорошо, чтобы быть сообщенным.
учитывая эту ситуацию, вопрос заключается в том, как выставить начальное исключение, когда оно не отображается в журнале ошибок.
решение довольно простое: поместите try / catch блокировать содержимое фрагмента onCreateView() и в catch п., бревно за исключением:
это может быть не очевидно , который фрагмент класс onCreateView() чтобы сделать это, в этом случае сделайте это для каждого класса фрагментов, используемого в макете, который вызвал проблему. Например, в случае OP код приложения, в котором произошло исключение, был
поэтому вам нужно поймать исключения в onCreateView() любых фрагментов, указанных в макете activity_main .
в моем случае исключение первопричины оказалось
это исключение не появляются в журнале ошибок, пока я не поймал его в onCreateView() и зарегистрировал его явно. Как только он был зарегистрирован, проблема была достаточно проста для диагностики и исправления ( details_view.xml существовал только под ldrtl-xhdpi папке, по какой-то причине). Ключом было поймать исключение, которое было корнем проблемы, и разоблачить его.
это не помешает сделать это в качестве шаблона в все фрагменты’ onCreateView() методы. Если там есть необработанное исключение, это приведет к сбою активности не обращающий внимания. Единственное отличие заключается в том, что если вы поймаете и зарегистрируете исключение в onCreateView() , вы не будете в темноте, почему это произошло.
P. S. Я просто понял, что этот ответ имеет отношение к @DaveHubbard, но использует другой подход для нахождения первопричины (лесозаготовка и отладчик).
У меня были похожие проблемы. Сообщение об ошибке часто содержит очень мало деталей, независимо от фактической причины. Но я нашел способ получить больше полезной информации. Оказывается, что внутренний android-класс «LayoutInflater».java ‘ (в android.view package) имеет метод «inflate», который повторно создает исключение, но не подбирает детали, поэтому вы теряете информацию о причине.
я использовал AndroidStudio и установил точку останова на линии LayoutInflator 539 (в версии я working in), который является первой строкой блока catch для общего исключения в этом методе «inflate»:
Если вы посмотрите на » e «в отладчике, вы увидите поле «причина». Это может быть очень полезно, давая вам подсказку о том, что действительно произошло. Вот как, например, я обнаружил, что родитель включенного фрагмента должен иметь идентификатор, даже если он не используется в вашем коде. Или что у TextView была проблема с измерением.
на всякий случай, если кому-то это нужно. Предположения: телефон устройства подключен к USB-кабелю и чтение IDE для запуска приложение. Перейдите в командную строку, чтобы определить проблему: введите adb logcat
затем запустите приложение из IDE. Вы будете исключением.
в моем случае: я развертывал приложение Android версии 2.3 на мобильном устройстве что не поддерживает виджет «пробел»
эта проблема возникает, когда у вас есть пользовательский класс, который расширяет другой класс (В данном случае зрения), а не импортировать все конструкторы требуемого класса.
например: открытый класс CustomTextView расширяет TextView
этот класс будет иметь 4 конструктора, и если вы пропустите какой-либо из них, он рухнет. На самом деле я пропустил последний, который использовался Lollipop, добавил, что конструктор и работал нормально.
я столкнулась с этой проблемой и решил ее, используя следующие коды. Я начинал транзакцию фрагментов с помощью childfragment manager.
вот как я начал фрагмент транзакции:
В следующих кодах объясняется, как я удалил фрагмент, добавленный с помощью childfragmentmanger.
нам также необходимо добавить следующее в build.gradle (app)
всякий раз, когда мы используем новые макеты и новые конструктивные особенности. надеюсь, это поможет вам.
после того, как ни один из ответов здесь не помог мне, я решил запустить приложение в режиме отладки, перемещаясь по каждой строке onCreateView в моем фрагменте (NavigationDrawerFragment в вашем случае). И заметил, что фрагмент испытывал трудности с раздуванием из-за исключения NullPointerException. Е. Г.
здесь mySeekBar был установлен в null (потому что я пропустил добавление элемента управления в соответствующем макете), и следующая строка попала в NPE, который вышел как InflateException. Также, как предложено выше переименуйте android: имя в класс.
эта проблема может возникнуть по различным причинам, упомянутым выше. Я бы рекомендовал линейный поток отладки, чтобы знать, что не так.
Я не знаю, поможет ли это.
У меня была эта проблема с TextView, который у меня был в макете, который я пытался надуть (android.вид.InflateException: двоичная строка XML-файла #45: ошибка раздувания класса TextView).
Я установил следующий атрибут XML android: textSize=»?android: attr / textAppearanceLarge» что не позволяло раздуть макет.
Не знаю точно, почему, (Я все еще немного нового Android-менее года опыта работы), может быть, что-то связано с вызовом системных атрибутов, idk, все, что я знаю, как только я использовал простой старый @dimen / md_text_16sp (что обычай мой), проблема решена 🙂
надеюсь, что это помогает.
Я немного опоздал на вечеринку, но не из этих ответов помог мне в моем случае. Я использовал Google map как SupportMapFragment и PlaceAutocompleteFragment оба в моем фрагменте. Как все ответы указывали на то, что проблема с SupportMapFragment карту быть воссозданы и перерисовывается.
но у меня также была проблема с PlaceAutocompleteFragment. Так вот рабочее решение для тех, кто столкнулся с этой проблемой из-за SupportMapFragment и SupportMapFragment
и в onDestroyView очистить SupportMapFragment и SupportMapFragment
Я думаю, что основная проблема заключается в» android:targetSdkVersion», который определен в AndroidManifest.XML. В моем случае начальное значение, которое я определил как:
Я изменил его на:
, который разрешил все мои ошибки. Таким образом, настройка правильного «targetSdkVersion» также важна перед созданием приложения для android.
в случае, если кто-то еще сюда заходит и ответы не помогают решить проблему, еще одна вещь, чтобы попробовать.
Как упоминали другие, это обычно вызвано проблемой, вложенной в сам XML, в отличие от того, что вы сделали неправильно в своей Java. В моем случае это была очень простая (и глупая) ошибка.
У меня был такой код:
когда все, что мне нужно было сделать, это прописать v в «View», чтобы система его узнала. Проверьте, что ваш пользовательские представления (или фрагменты, recyclerviews и т. д.) имеют правильное объявление с заглавной буквы, чтобы автозаполнение XML соответствовало соответствующему представлению.
для некоторых из вас, которые до сих пор не нашли решения для этого, в моем случае это происходило, потому что у меня была проблема OOM (из памяти). Это может произойти, когда у вас есть, например, утечка памяти в вашем приложении при его использовании в течение длительного времени. В моем stack trace это было главной причиной.
у меня было это на устройстве 4.4.2, но 5+ был в порядке. Причина: внутри инициализации пользовательского представления я создавал TextView(Context context, AttributeSet attrs, @AttrRes int defStyleAttr, @StyleRes int defStyleRes) , который является API 21+.
Android Studio 2.1 не жалуется на это, хотя он аннотирован TargetApi(21) . По-видимому, Android Studio 2.2 исправит это и правильно покажет его как ошибку.
надеюсь, это кому-то поможет.
У меня тоже была эта ошибка, и после очень долгой отладки проблема заключалась в том, что моя расширенная активность MainClass вместо FrameActivity в моем случае xml не была проблемой. Надеюсь помочь вам.
как упоминалось в предыдущем посте,
переименовать
тем не менее, это не сработало для меня. Затем я просто использовал имя класса без com.фрагмент части и вуаля это сработало. Поэтому измените его, наконец, на
макет я пытался надуть было
тег, удалив его починил.
Я пытался надуть предыдущий макет, предназначенный для Actvity в адаптер view-pager.
моя ошибка была вызвана другой проблемой.
Я передавал пучок от действия к его фрагменту. Когда я прокомментировал код, получающий пакет во фрагменте, ошибка исчезла. Как оказалось, моя ошибка была связана с приведенной ниже частью» getArguments ();», которая возвращала null.
проверив код отправки активности, я понял, что у меня была глупая ошибка ниже;
Я создавал новый фрагмент в строке с стрелка. В то время как я должен был использовать предварительно созданный фрагмент, у которого уже был мой сверток. Так и должно было быть:—4—>
Я не знаю, почему именно он выдает эту ошибку вместо NPE, но это решило мою ошибку, если у кого-то есть тот же сценарий
У меня была та же проблема, в моем случае имя пакета было неправильным, исправление его решило проблему.
после долгого времени попыток, вот как я решил проблему после того, как ни один из вышеперечисленных ответов не мог.
- расширения AppCompatActivity для Main вместо Activity .
- добавить android:theme=»@style/Theme.AppCompat.Light» на на AndroidManifest.xml
в своем NavigationDrawerFragment класс, изменить свой ActionBar экземпляров
редактировать
это должно быть согласованностью между активность и планировка. Если планировка один из Тема AppCompat, такие как Theme.AppCompat.Light ваш активность должны extends AppCompatActivity .
я хотел иметь бургер и Панель Навигации это похоже на Android Gmail Приложение, но я закончил с уродливым Панель Навигации. Все это потому, что все мои классы extends Activity вместо AppCompatActivity .
я пересчитал весь проект, чтобы продлить AppCompatActivity , затем щелкните правой кнопкой мыши на Layout Folder выбрал new -> Activity затем Navigation Drawer Activity и бум, все сделано для меня!
Источник
Inflate Exception Class
Definition
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
This exception is thrown by an inflater on error conditions.
Remarks
Portions of this page are modifications based on work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License.
Constructors
A constructor used when creating managed representations of JNI objects; called by the runtime.
Fields
Properties
Returns the cause of this throwable or null if the cause is nonexistent or unknown.
(Inherited from Throwable)
The handle to the underlying Android instance.
(Inherited from Throwable)
Creates a localized description of this throwable.
(Inherited from Throwable)
Returns the detail message string of this throwable.
(Inherited from Throwable)
This API supports the Mono for Android infrastructure and is not intended to be used directly from your code.
This API supports the Mono for Android infrastructure and is not intended to be used directly from your code.
Methods
Appends the specified exception to the exceptions that were suppressed in order to deliver this exception.
(Inherited from Throwable)
Fills in the execution stack trace.
(Inherited from Throwable)
Provides programmatic access to the stack trace information printed by #printStackTrace() .
(Inherited from Throwable)
Returns an array containing all of the exceptions that were suppressed, typically by the try -with-resources statement, in order to deliver this exception.
(Inherited from Throwable)
Initializes the cause of this throwable to the specified value.
(Inherited from Throwable)
Prints this throwable and its backtrace to the standard error stream.
(Inherited from Throwable)
Prints this throwable and its backtrace to the standard error stream.
(Inherited from Throwable)
Prints this throwable and its backtrace to the standard error stream.
(Inherited from Throwable)
Sets the Handle property.
(Inherited from Throwable)
Sets the stack trace elements that will be returned by #getStackTrace() and printed by #printStackTrace() and related methods.
(Inherited from Throwable)
Explicit Interface Implementations
IJavaPeerable.Disposed() | (Inherited from Throwable) |
IJavaPeerable.DisposeUnlessReferenced() | (Inherited from Throwable) |
IJavaPeerable.Finalized() | (Inherited from Throwable) |
IJavaPeerable.JniManagedPeerState | (Inherited from Throwable) |
IJavaPeerable.SetJniIdentityHashCode(Int32) | (Inherited from Throwable) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) | (Inherited from Throwable) |
IJavaPeerable.SetPeerReference(JniObjectReference) | (Inherited from Throwable) |
Extension Methods
Performs an Android runtime-checked type conversion.
Источник