Android.view.InflateException: двоичный файл XML: ошибка раздувания фрагмента класса
У меня очень расстраивающая ошибка, которую я не могу объяснить. Я создал приложение для Android, которое использует Android AppCompat
для совместимости со старыми версиями. Вот мой основной файл макета активности:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<!-- As the main content view, the view below consumes the entire
space available using match_parent in both dimensions. -->
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- android:layout_gravity="start" tells DrawerLayout to treat
this as a sliding drawer on the left side for left-to-right
languages and on the right side for right-to-left languages.
If you're not building against API 17 or higher, use
android:layout_gravity="left" instead. -->
<!-- The drawer is given a fixed width in dp and extends the full height of
the container. -->
<fragment android:id="@+id/navigation_drawer"
android:layout_width="@dimen/navigation_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
android:name="com.fragment.NavigationDrawerFragment" />
</android.support.v4.widget.DrawerLayout>
И вот основной код моей деятельности:
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
Основная проблема здесь: приведенный выше код работает без проблем практически на устройствах (стимулируемых устройствах или некоторых реальных устройствах). Но когда я запускаю его на Samsung S3. Это замечает эту ошибку:
java.lang.RuntimeException: Unable to start activity ComponentInfo{view.MainActivity}: android.view.InflateException: Binary XML file line #25: Error inflating class fragment
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2081)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2106)
at android.app.ActivityThread.access$700(ActivityThread.java:134)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1217)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4856)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #25: Error inflating class fragment
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:316)
at android.app.Activity.setContentView(Activity.java:1901)
at android.support.v7.app.ActionBarActivity.superSetContentView(ActionBarActivity.java:208)
at android.support.v7.app.ActionBarActivityDelegateICS.setContentView(ActionBarActivityDelegateICS.java:111)
at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:76)
Подскажите пожалуйста, как исправить ошибку, спасибо :)
Ответы
Ответ 1
После долгого времени для отладки я исправил эту проблему. (Хотя я все еще не могу объяснить, почему). Чтобы изменить свойство android:name
на class
. (хотя в Android Document они говорят, что эти свойства одинаковы, но они работают!!!)
Итак, он должен измениться:
android:name="com.fragment.NavigationDrawerFragment"
to
class = "com.fragment.NavigationDrawerFragment"
Итак, новый макет должен быть:
<!-- As the main content view, the view below consumes the entire
space available using match_parent in both dimensions. -->
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- android:layout_gravity="start" tells DrawerLayout to treat
this as a sliding drawer on the left side for left-to-right
languages and on the right side for right-to-left languages.
If you're not building against API 17 or higher, use
android:layout_gravity="left" instead. -->
<!-- The drawer is given a fixed width in dp and extends the full height of
the container. -->
<fragment android:id="@+id/navigation_drawer"
android:layout_width="@dimen/navigation_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
class = "com.fragment.NavigationDrawerFragment" />
Надеюсь, что эта помощь:)
Ответ 2
Я не мог решить свою проблему, используя предоставленные ответы. Наконец я изменил это:
<fragment
android:id="@+id/fragment_food_image_gallery"
android:name="ir.smartrestaurant.ui.fragment.ImageGalleryFragment"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout="@layout/fragment_image_gallery"
tools:layout="@layout/fragment_image_gallery" />
:
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="200dp" />
private void showGallery() {
ImageGalleryFragment fragment = new ImageGalleryFragment()
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container, fragment)
.commit();
}
и он работает.
Если вы используете его внутри фрагмента, используйте getChildFragmentManager вместо getSupportFragmentManager.
Ответ 3
У меня была такая же проблема, проблема, все ответы в этом потоке были безуспешными. Мое решение состояло в том, что я не добавил идентификатор в XML активности. Я не думал, что это будет иметь значение, но так оно и было.
Итак, в XML-операции Activity я:
<fragment
android:name="com.covle.hellocarson.SomeFragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
Но должно было быть:
<fragment
android:id="@+id/some_fragment"
android:name="com.covle.hellocarson.SomeFragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
Если кто-то будет рад прокомментировать, почему это так, я все уши, другим, надеюсь, это поможет.
Ответ 4
TL/DR. Исключение произошло при создании фрагмента, ссылающегося на XML более высокого уровня. Это исключение привело к сбою инфляции верхнего уровня, но начальное исключение не было сообщено; в трассировке стека обнаруживается только более высокий уровень инфляции. Чтобы найти основную причину, вы должны уловить и записать исходное исключение.
Исходной причиной ошибки может быть множество вещей, поэтому здесь так много разных ответов, что касается проблемы для каждого человека. Для некоторых это связано с атрибутами id
, class
или name
. Для других это было связано с вопросом о разрешении или настройке сборки. Для меня это не устранило проблему; вместо этого существовал ресурс, который можно использовать только в drawable-ldrtl-xhdpi
, а не в соответствующем месте, например drawable
.
Но это всего лишь детали. Проблема большого изображения заключается в том, что сообщение об ошибке, появившееся в logcat, не описывает исключение, которое запустило все это. Когда HTML-код более высокого уровня ссылается на фрагмент, вызывается фрагмент onCreateView()
. Когда исключение возникает в фрагменте onCreateView()
(например, при раздувании XML-фрагмента XML), это приводит к сбою взлома XML файла верхнего уровня. Этот взлом инфляции более высокого уровня является тем, что сообщается как исключение в журналах ошибок. Но исходное исключение, похоже, не доходит до цепочки, чтобы сообщить об этом.
Учитывая эту ситуацию, возникает вопрос о том, как открыть исходное исключение, если оно не отображается в журнале ошибок.
Решение довольно просто: поместите блок try
/catch
вокруг содержимого фрагмента onCreateView()
, а в предложении catch
запишите исключение:
public View onCreateView(LayoutInflater inflater, ViewGroup contnr, Bundle savedInstSt) {
try {
mContentView = inflater.inflate(R.layout.device_detail_frag, null);
// ... rest of body of onCreateView() ...
} catch (Exception e) {
Log.e(TAG, "onCreateView", e);
throw e;
}
}
Не может быть очевидно, какой фрагмент class onCreateView()
сделать это, и в этом случае сделать это с каждым классом фрагмента, который использовался в макете, вызвавшем проблему. Например, в случае OP код приложения, в котором произошло исключение, был
at android.app.Activity.setContentView(Activity.java:1901)
который
setContentView(R.layout.activity_main);
Итак, вам нужно поймать исключения в onCreateView()
любых фрагментов, на которые ссылается макет activity_main
.
В моем случае причиной основной причины оказалось
Caused by: android.content.res.Resources$NotFoundException: Resource
"com.example.myapp:drawable/details_view" (7f02006f) is not a
Drawable (color or path): TypedValue{t=0x1/d=0x7f02006f a=-1
r=0x7f02006f}
Это исключение не появилось в журнале ошибок, пока я не поймал его в onCreateView()
и не зарегистрировал его явно. Как только он был зарегистрирован, проблема была достаточно простой, чтобы диагностировать и исправлять (details_view.xml
существовала только в папке ldrtl-xhdpi
по какой-либо причине). Ключ поймал исключение, являющееся корнем проблемы, и разоблачение этого.
Не помешает сделать это как шаблон во всех методах onCreateView()
всех ваших фрагментов. Если в нем есть неперехваченное исключение, это приведет к сбою активности независимо. Единственное различие заключается в том, что если вы поймаете и запишите исключение в onCreateView()
, вы не будете в неведении относительно того, почему это произошло.
P.S. Я просто понял, что этот ответ связан с @DaveHubbard's, но использует другой подход для поиска основной причины (ведение журнала против отладчика).
Ответ 5
Возможно, вам это не понадобится, но если дальнейшие читатели найдут это полезным. У меня точно такой же android.view.InflateException:...Error inflating class fragment
. У меня были все нужные библиотеки. Решено путем добавления еще одного пользовательского разрешения в файл AndroidManifest.xml
i.e. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
Btw Я работал Android Studio 0.8.9 on Ubuntu 12.04.
Ответ 6
У меня такая же проблема, потому что я не реализовал прослушиватель. См. Следующий код с /*Add This!*/
.
public class SomeActivity extends AppCompatActivity
implements BlankFragment.OnFragmentInteractionListener /*Add this!*/
{
@Override /*Add This!*/
public void onFragmentInteraction(Uri uri){ /*Add This!*/
} /*Add This!*/
}
FYI, мой класс фрагмента выглядит примерно так:
public class SomeFragment extends Fragment {
private OnFragmentInteractionListener mListener;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mListener = (OnFragmentInteractionListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnFragmentInteractionListener");
}
}
public interface OnFragmentInteractionListener {
public void onFragmentInteraction(Uri uri);
}
}
Изменить:
Я также замечаю это же сообщение об ошибке при других обстоятельствах, когда есть исключение в onCreate
функции Fragment
. У меня есть что-то следующее:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
int ID = getArguments().getInt("val");
return rootView;
}
Поскольку я повторно использую этот фрагмент, я полностью забываю задавать аргументы. Тогда результат getArguments()
равен null
. Очевидно, что здесь появляется исключение null
. Я предлагаю вам следить за такими ошибками.
Ответ 7
Является ли ваш файл NavigationDrawerFragment расширением файла android.support.v4.app.Fragment? Другими словами, вы импортируете правильный пакет?
import android.support.v4.app.Fragment;
Ответ 8
У меня также была эта проблема. Я решил это, заменив импорт в MainActivity
и NavigationDrawerFragment
С
import android.app.Activity;
import android.app.ActionBar;
Для
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
Я обновил MainActivity
, чтобы продолжить ActionBarActivity
вместо Activity
public class MainActivity extends ActionBarActivity implements NavigationDrawerFragment.NavigationDrawerCallbacks
Также используйте ActionBar actionBar = getSupportActionBar();
, чтобы получить ActionBar
И я обновил следующую функцию в NavigationDrawerFragment
private ActionBar getActionBar()
{
return ((ActionBarActivity)getActivity()).getSupportActionBar();
}
Ответ 9
i столкнулся с этой проблемой и решил ее, используя следующие коды. Я начал транзакцию фрагмента с помощью диспетчера childfragment.
расположение:
<fragment
class="com.google.android.youtube.player.YouTubePlayerSupportFragment"
android:id="@+id/youtube_fragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
вот как я начал транзакцию фрагмента:
youTubePlayerFragment = (YouTubePlayerSupportFragment) getChildFragmentManager().findFragmentById(R.id.youtube_fragment);
следующие коды объясняют, как я удалил фрагмент, добавленный с помощью childfragmentmanger.
@Override
public void onDestroyView() {
super.onDestroyView();
youTubePlayerFragment = (YouTubePlayerSupportFragment) getChildFragmentManager().findFragmentById(R.id.youtube_fragment);
if (youTubePlayerFragment != null)
{
getChildFragmentManager().beginTransaction().remove(youTubePlayerFragment).commitAllowingStateLoss();
}
youTubePlayer = null;
}
Ответ 10
У меня были подобные проблемы вкл./выкл. Сообщение об ошибке часто дает очень мало деталей, независимо от фактической причины. Но я нашел способ получить более полезную информацию. Оказывается, внутренний класс Android LayoutInflater.java(в пакете android.view) имеет метод "раздувания", который перебрасывает исключение, но не отображает детали, поэтому вы теряете информацию о причине.
Я использовал AndroidStudio и установил точку останова в строке 539 LayoutInflator (в версии, в которой я работаю), которая является первой строкой блока catch для общего исключения в этом методе "надуть":
} catch (Exception e) {
InflateException ex = new InflateException(
parser.getPositionDescription()
+ ": " + e.getMessage());
ex.initCause(e);
throw ex;
Если вы посмотрите на "e" в отладчике, вы увидите поле "причина". Это может быть очень полезно дать вам подсказку о том, что на самом деле произошло. Так, например, я обнаружил, что родительский элемент включенного фрагмента должен иметь идентификатор, даже если он не используется в вашем коде. Или что TextView имел проблему с измерением.
Ответ 11
На всякий случай кому-то это нужно.
Предположения: телефон устройства подключен к USB-кабелю и чтение IDE для запуска
приложение.
Перейдите в командную строку, чтобы определить проблему:
введите adb logcat
Затем запустите приложение из IDE.
Вы сделаете исключение.
В моем случае: я развернул приложение Android версии 2.3 на мобильное устройство
который не поддерживает виджет "Пространство"
Ответ 12
Эта проблема возникает, когда у вас есть собственный класс, который расширяет другой класс (в данном случае представление) и не импортирует все конструкторы, требуемые классом.
Например: public class CustomTextView расширяет TextView {
}
У этого класса было бы 4 конструктора, и если бы вы пропустили никого из них, он бы разбился. На самом деле я пропустил последний, который был использован Lollipop, добавил, что конструктор и отлично работает.
Ответ 13
нам также нужно добавить следующее в build.gradle(app)
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
всякий раз, когда мы используем новые макеты или новые конструктивные элементы.
надеюсь, это поможет вам.
Ответ 14
После того, как ни один из ответов не помог мне, я решил запустить приложение в режиме отладки, перемещаясь по каждой строке onCreateView в моем фрагменте (NavigationDrawerFragment в вашем случае). И заметил, что фрагмент испытывает трудности с раздуванием из-за исключения NullPointerException.
Например.
mySeekBar = (SeekBar) getActivity().findViewById(R.id.mySeekBar);
mySeekBar.setOnSeekBarChangeListener(this);
Здесь mySeekBar был установлен в null (потому что я пропустил добавление элемента управления в соответствующий макет), а следующая строка попала в NPE, который вышел как InflateException.
Кроме того, как было предложено выше, переименуйте android: name в класс.
Эта проблема может возникнуть по разным причинам, упомянутым выше. Я бы порекомендовал потоковый поток отладки, чтобы узнать, что не так.
Ответ 15
Я не знаю, поможет ли это.
У меня была эта проблема с TextView, который у меня был в макете, который я пытался раздуть (android.view.InflateException: двоичная строка XML файла # 45: ошибка раздувания класса TextView).
Я установил следующий атрибут XML android: textSize = "? android: attr/textAppearanceLarge" , который не позволял раздувать макет.
Не знаю точно, почему, (я все еще немного новичок в Android - менее года опыта), может иметь какое-то отношение к вызовам системных атрибутов, idk, все, что я знаю, как только я использовал простой старый @dimen/md_text_16sp (который является обычным явлением), проблема решена:)
Надеюсь, что это поможет...
Ответ 16
У меня было это на устройстве 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 исправит это и правильно покажет его как ошибку.
Надеюсь, это поможет кому-то.
Ответ 17
Как упоминалось в предыдущем посте,
переименование
android:name="com.fragment.NavigationDrawerFragment"
к
class = "com.fragment.NavigationDrawerFragment"
Тем не менее, это не сработало для меня. Затем я просто использовал имя класса без части com.fragment и voila. Итак, измените его, наконец, на
class = "NavigationDrawerFragment"
Ответ 18
Я немного опоздал на вечеринку, но ни один из этих ответов не помог мне в моем случае. Я использовал карту Google в качестве SupportMapFragment и PlaceAutocompleteFragment в моем фрагменте. Поскольку все ответы указывали на то, что проблема в том, что SupportMapFragment является картой, которая должна быть воссоздана и перерисована.
Но у меня также была проблема с PlaceAutocompleteFragment. Итак, вот рабочее решение для тех, кто сталкивается с этой проблемой из-за SupportMapFragment и SupportMapFragment
mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.mapFragment);
FragmentManager fm = getChildFragmentManager();
if (mapFragment == null) {
mapFragment = SupportMapFragment.newInstance();
fm.beginTransaction().replace(R.id.mapFragment, mapFragment).commit();
fm.executePendingTransactions();
}
mapFragment.getMapAsync(this);
//Global PlaceAutocompleteFragment autocompleteFragment;
if (autocompleteFragment == null) {
autocompleteFragment = (PlaceAutocompleteFragment) getActivity().getFragmentManager().findFragmentById(R.id.place_autoCompleteFragment);
}
И в onDestroyView очистите SupportMapFragment и SupportMapFragment
@Override
public void onDestroyView() {
super.onDestroyView();
if (getActivity() != null) {
Log.e("res","place dlted");
android.app.FragmentManager fragmentManager = getActivity().getFragmentManager();
android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.remove(autocompleteFragment);
fragmentTransaction.commit();
autocompleteFragment = null;
}
}
Ответ 19
После долгих попыток я решил проблему так, как не смог ответить ни один из приведенных выше ответов.
- Расширьте
AppCompatActivity
для своей Main
деятельности вместо Activity
. - Добавьте
android:theme="@style/Theme.AppCompat.Light"
в свой <Activity..../>
в AndroidManifest.xml
-
В своем классе NavigationDrawerFragment
измените экземпляры ActionBar
на
ActionBar mActionBar=((AppCompatActivity)getActivity()).getSupportActionBar();
РЕДАКТИРОВАТЬ
Это должно быть соответствие между деятельностью и макетом. Если в макете есть одна из тем AppCompat, например, Theme.AppCompat.Light
, ваша активность должна Theme.AppCompat.Light
extends AppCompatActivity
.
Я хотел иметь значок гамбургера и навигационный ящик, который выглядит как приложение Android Gmail, но в итоге я получил уродливый навигационный ящик. Все это потому, что все мои классы extends Activity
вместо AppCompatActivity
.
Я пересмотрел весь проект, чтобы расширить AppCompatActivity
, затем AppCompatActivity
правой кнопкой Layout Folder
, выбрал new
→ " Activity
затем " Navigation Drawer Activity
и "Boom" - все сделано для меня!
Ответ 20
Я думаю, что основная проблема связана с "android: targetSdkVersion", которая определена в AndroidManifest.xml. В моем случае начальное значение, которое я определил как:
android:targetSdkVersion=16
Я изменил его на:
android:targetSdkVersion=22
который разрешил мою всю ошибку. Итак, настройка правильной "targetSdkVersion" также важна, прежде чем создавать приложение для Android.
Ответ 21
Если кто-то приходит сюда, и ответы не помогают решить проблему, еще одна вещь, чтобы попробовать.
Как уже упоминалось, это обычно вызвано проблемой, вложенной в сам XML, а не с тем, что вы сделали неправильно в своей Java. В моем случае это была супер легкая (и глупая) ошибка, чтобы исправить.
У меня был код вроде этого:
<view
android:layout_width="fill_parent"
android:layout_height="1dip"
android:id="@+id/view44"
android:background="@color/gray"
/>
Когда все, что мне нужно было сделать, это заглавная буква v в "View", чтобы система переделала его. Убедитесь, что ваши пользовательские представления (или фрагменты, recyclerviews и т.д.) Имеют правильную заглавную декларацию спереди, так что автозаполнение XML будет соответствовать соответствующему виду.
Ответ 22
Для некоторых из вас, которые до сих пор не нашли решения для этого, в моем случае это происходило, потому что у меня была проблема с OOM (Out of Memory). Это может произойти, если у вас есть, например, утечка памяти в приложении при ее использовании в течение длительного времени. В моей трассе стека это была основная причина.
Ответ 23
У меня тоже была эта ошибка, и после очень долгого отладки проблема заключалась в том, что моя MainClass расширила Activity вместо FrameActivity, в моем случае xml не был проблемой. Надеюсь помочь вам.
Ответ 24
В моем случае.
Макет, который я пытался раздуть, имел
<include
layout = "...."
/>
удалив его, зафиксировав его.
Я пытался раздуть предыдущий макет, предназначенный для Actvity в адаптере view-pager.
Ответ 25
Моя ошибка вызвана другой проблемой.
Я передавал пакет из Activity в его фрагмент.
Когда я прокомментировал код, получающий пакет в фрагменте, ошибка исчезла.
Как оказалось, моя ошибка была вызвана ниже: "getArguments();" которая возвращала значение null.
Bundle args = getArguments();
Проверяя код отправки активности, я понял, что у меня была глупая ошибка в ниже;
Bundle bundle =new Bundle();
bundle.putInt("recipeID", recipe_position);
Fragment mainFragment = new MainActivityFragment();
mainFragment.setArguments(bundle);
FragmentManager fragmentManager = getSupportFragmentManager();
--> fragmentManager.beginTransaction()
.replace(R.id.container, new MainActivityFragment(),
DetailRecipeActivityFragment.TAG)
.commit();
Я создал новый фрагмент в строке со стрелкой. В то время как я должен был использовать предварительно созданный фрагмент, который уже имел мой пакет.
Так должно было быть:
Bundle bundle =new Bundle();
bundle.putInt("recipeID", recipe_position);
Fragment mainFragment = new MainActivityFragment();
mainFragment.setArguments(bundle);
Fragment mainFragment = new MainActivityFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
-->fragmentManager.beginTransaction()
.replace(R.id.container, mainFragment,
DetailRecipeActivityFragment.TAG)
.commit();
Я не знаю, почему именно он выбрасывает эту ошибку вместо NPE, но это решило мою ошибку, если кто-то имеет тот же сценарий
Ответ 26
У меня была такая же проблема, в моем случае имя пакета было неправильным, исправление решило проблему.
Ответ 27
Откройте файл gradle.properties и добавьте следующую строку:
android.enableAapt2=false
Ссылка: https://github.com/chrisjenx/Calligraphy/issues/417#issuecomment-365177808
Ответ 28
Я имел эту ошибку, когда у меня был RecyclerView в корне моего фрагмента. Xml,
но когда я обернул его с помощью ViewGroup, приложение работало нормально.
Ответ 29
Перепробовав каждый ответ в этой теме, единственное, что исправило его для меня, - это сделать все мои фрагменты прямыми потомками Fragment()
По какой-то причине наличие среднего класса BaseFragment
останавливало более старые версии Android SDK для работы.
Есть идеи, почему это будет?