Android.view.InflateException: двоичный файл XML: ошибка раздувания фрагмента класса - программирование
Подтвердить что ты не робот

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)

Подскажите пожалуйста, как исправить ошибку, спасибо :)

4b9b3361

Ответ 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

После долгих попыток я решил проблему так, как не смог ответить ни один из приведенных выше ответов.

  1. Расширьте AppCompatActivity для своей Main деятельности вместо Activity.
  2. Добавьте android:theme="@style/Theme.AppCompat.Light" в свой <Activity..../> в AndroidManifest.xml
  3. В своем классе 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

У меня была такая же проблема, в моем случае имя пакета было неправильным, исправление решило проблему.

Ответ 28

Я имел эту ошибку, когда у меня был RecyclerView в корне моего фрагмента. Xml,

но когда я обернул его с помощью ViewGroup, приложение работало нормально.

Ответ 29

Перепробовав каждый ответ в этой теме, единственное, что исправило его для меня, - это сделать все мои фрагменты прямыми потомками Fragment() По какой-то причине наличие среднего класса BaseFragment останавливало более старые версии Android SDK для работы.

Есть идеи, почему это будет?