Search code examples
androidandroid-layoutandroid-fragmentsandroid-activity

Error inflating layout - Error inflating class fragment


I'm trying to create a fragment in main activity so later i can add elements dynamically in, when i run the app i get this error:

04-29 19:32:47.318 E/   AndroidRuntime(27813): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mycompany.myapp/com.mycompany.myapp.MainActivity}: android.view.InflateException: Binary XML file line #6: Error inflating class Fragment

When i try to run the app without the <Fragment> tag in main.xml it works

MainActivity:

package com.mycompany.myapp;

import android.os.Bundle;
import android.app.Activity;

public class MainActivity extends Activity 
{

@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}
}

main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">

<Fragment
    android:id="@+id/fL"
    android:name="com.mycompany.myapp.MyFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

</LinearLayout>

MyFragment:

package com.mycompany.myapp;
import android.os.Bundle;
import android.view.*;
import android.app.Fragment;

public class MyFragment extends Fragment
{
 View root;
 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
 {
    super.onCreateView(inflater, container, savedInstanceState);
    root = inflater.inflate(R.layout.fraglayout, container, false);
    return root;
 }
}

fraglayout.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.mycompany.myapp.MyFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

</LinearLayout>

Also tried class="com.mycompany.myapp.MyFragment" instead ofandroid:name in main layout<fragment>

Full logCat(E):

04-29 20:11:03.444 E/dalvikvm(4221): heapsize Dalvik_dalvik_system_VMRuntime_nativeMinimumHeapSize 0
04-29 20:11:03.444 E/dalvikvm(4221): heapsize Dalvik_dalvik_system_VMRuntime_nativeMinimumHeapSize 15154664
04-29 20:11:03.945 E/AndroidRuntime(4221): FATAL EXCEPTION: main
04-29 20:11:03.945 E/AndroidRuntime(4221): Process: com.mycompany.myapp, PID: 4221
04-29 20:11:03.945 E/AndroidRuntime(4221): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mycompany.myapp/com.mycompany.myapp.MainActivity}: android.view.InflateException: Binary XML file line #6: Error inflating class Fragment
04-29 20:11:03.945 E/AndroidRuntime(4221):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2342)
04-29 20:11:03.945 E/AndroidRuntime(4221):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2392)
04-29 20:11:03.945 E/AndroidRuntime(4221):  at android.app.ActivityThread.access$800(ActivityThread.java:151)
04-29 20:11:03.945 E/AndroidRuntime(4221):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1266)
04-29 20:11:03.945 E/AndroidRuntime(4221):  at android.os.Handler.dispatchMessage(Handler.java:102)
04-29 20:11:03.945 E/AndroidRuntime(4221):  at android.os.Looper.loop(Looper.java:136)
04-29 20:11:03.945 E/AndroidRuntime(4221):  at android.app.ActivityThread.main(ActivityThread.java:5421)
04-29 20:11:03.945 E/AndroidRuntime(4221):  at java.lang.reflect.Method.invokeNative(Native Method)
04-29 20:11:03.945 E/AndroidRuntime(4221):  at java.lang.reflect.Method.invoke(Method.java:515)
04-29 20:11:03.945 E/AndroidRuntime(4221):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:979)
04-29 20:11:03.945 E/AndroidRuntime(4221):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:795)
04-29 20:11:03.945 E/AndroidRuntime(4221):  at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)
04-29 20:11:03.945 E/AndroidRuntime(4221):  at dalvik.system.NativeStart.main(Native Method)
04-29 20:11:03.945 E/AndroidRuntime(4221): Caused by: android.view.InflateException: Binary XML file line #6: Error inflating class Fragment
04-29 20:11:03.945 E/AndroidRuntime(4221):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:707)
04-29 20:11:03.945 E/AndroidRuntime(4221):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
04-29 20:11:03.945 E/AndroidRuntime(4221):  at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
04-29 20:11:03.945 E/AndroidRuntime(4221):  at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
04-29 20:11:03.945 E/AndroidRuntime(4221):  at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
04-29 20:11:03.945 E/AndroidRuntime(4221):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:296)
04-29 20:11:03.945 E/AndroidRuntime(4221):  at android.app.Activity.setContentView(Activity.java:1941)
04-29 20:11:03.945 E/AndroidRuntime(4221):  at com.mycompany.myapp.MainActivity.onCreate(MainActivity.java:13)
04-29 20:11:03.945 E/AndroidRuntime(4221):  at android.app.Activity.performCreate(Activity.java:5264)
04-29 20:11:03.945 E/AndroidRuntime(4221):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1099)
04-29 20:11:03.945 E/AndroidRuntime(4221):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2282)
04-29 20:11:03.945 E/AndroidRuntime(4221):  ... 12 more
04-29 20:11:03.945 E/AndroidRuntime(4221): Caused by: java.lang.ClassNotFoundException: Didn't find class "android.view.Fragment" on path: DexPathList[[zip file "/data/app/com.mycompany.myapp-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.mycompany.myapp-2, /vendor/lib, /system/lib]]
04-29 20:11:03.945 E/AndroidRuntime(4221):  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
04-29 20:11:03.945 E/AndroidRuntime(4221):  at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
04-29 20:11:03.945 E/AndroidRuntime(4221):  at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
04-29 20:11:03.945 E/AndroidRuntime(4221):  at android.view.LayoutInflater.createView(LayoutInflater.java:559)
04-29 20:11:03.945 E/AndroidRuntime(4221):  at android.view.LayoutInflater.onCreateView(LayoutInflater.java:652)
04-29 20:11:03.945 E/AndroidRuntime(4221):  at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:66)
04-29 20:11:03.945 E/AndroidRuntime(4221):  at android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)
04-29 20:11:03.945 E/AndroidRuntime(4221):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694)
04-29 20:11:03.945 E/AndroidRuntime(4221):  ... 22 more

Solution

  • Try using lowercase "f" instead of uppercase letter "F" on main.xml layout while writing Fragment:

    // <<<< start with lowercase
    <fragment 
        android:id="@+id/fL"
        android:name="com.mycompany.myapp.MyFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    

    Some explanation about the solution I have found on another question:

    Fragments when defined in XML aren't actually views. The full view name is specified, or it assumes android.view for the package and finds the rest. But a fragment is only truly specified when it includes the android:name tag. It acts like a keyword, which are typically written in lower case. Thus, Fragment refers to the class, and fragment is the placeholder in XML for fragments.

    As Andrew mentioned in the comments, any special item, such as and are written in lower case, as they are not android.view's.

    Source: https://stackoverflow.com/a/21948080/3669559